我是初学者,我刚开始不知道可以这样做,我只是想着试着去这样做了,结果真的可以,所以我
在我的模块就自己封装了一个SQLHelper,虽然下面用的这个不是很好,但是基本上满足需求,
因为似乎所有类都能转换为String,所以就用String数组来补充sql语句中的可变参数,但是有
一个问题,就是在调用的时候第二个参数必须为null,或者String数组,如果只有一个参数,也
要用String数组的形式传进去(如:String []params=n"ew String[]{"xxx"};),这样做也有
一定的麻烦。 由于当时不知道可变参数是这样写的,如果将以下的第二个参数换成String...
params,那么第二个参数在空的情况下就可以不写,或者写为null。 在只有一个值的情况下直接
转为String类型写入即可。再没有必要转换成String数组类型
/**SQLHelper
*创建人:幽林孤狼
*创建时间:2014-07-17 16:24
*/
package XXX;
import java.io.InputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import com.new_fgw.utils.JdbcUtils;
public class SQLHelper{
private static Connection conn=null;
private static PreparedStatement ps=null;
private static ResultSet rs=null;
private static DataSource myDataSource = null;
private static CallableStatement callableStatement=null;
static {
try {
Properties prop=new Properties();
InputStream in=JdbcUtils.class.getClassLoader
().getResourceAsStream("dbcpconfig.properties");
prop.load(in);
myDataSource=BasicDataSourceFactory.createDataSource(prop);
} catch (Exception e){
e.printStackTrace();
}
}
public static Connection GetConn()throws SQLException {
return myDataSource.getConnection();
}
public static DataSource getDataSource(){
return myDataSource;
}
public static PreparedStatement getPs() {
return ps;
}
/**执行带有参数的更新sql语句
* @param sql
* @param parameters
* @return
*/
public static boolean executeUpdate(String sql,String []parameters){
boolean b=false;
try {
conn =GetConn();
ps = conn.prepareStatement(sql);
if(parameters!=null){
for(int i=0;i<parameters.length;i++){
ps.setString(i+1, parameters[i]);
}
}
int x=ps.executeUpdate();
if(x>0)
{
b=true;
}
} catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
SQLHelper.close(rs, ps,conn);
}
return b;
}
/**执行带有参数的存储过程,完成数据的更新
* @param sql
* @param parameters sql
* @return
*/
public static boolean executeUpdateByProcedure(String procedure,String []
parameters){
boolean b=false;
try {
conn =GetConn();
callableStatement =conn.prepareCall(procedure);
if(parameters!=null){
for(int i=0;i<parameters.length;i++){
callableStatement.setString(i+1, parameters[i]);
}
}
int x=callableStatement.executeUpdate();
if(x>0)
{
b=true;
}
} catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
SQLHelper.close(rs, ps,conn);
}
return b;
}
/**执行带有参数的查询存储过程
* @param sql
* @param parameters sql
* @return
*/
public static ResultSet executeQueryByProcedure(String procedure,String []
parameters){
try {
conn =GetConn();
callableStatement=conn.prepareCall(procedure);
if(parameters!=null){
for(int i=0;i<parameters.length;i++){
callableStatement.setString(i+1, parameters[i]);
}
}
rs=callableStatement.executeQuery();
} catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
// SQLHelper.close(rs, ps,conn);
}
return rs;
}
/**执行带有参数的查询sql语句
* @param sql
* @param parameters sql
* @return
*/
public static ResultSet executeQuery(String sql,String []parameters){
try {
conn = GetConn();
ps = conn.prepareStatement(sql);
if(parameters !=null){
for(int i=0;i<parameters.length;i++){
ps.setString(i+1, parameters[i]);
}
}
//??в??
rs = ps.executeQuery();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
return rs;
}
/**
* 关闭对应的资源
* @param rs
* @param st
* @param conn
*/
public static void close(ResultSet rs, Statement st, Connection conn) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(conn!=null){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
dbcpconfig.properties文件如下:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/databaseName
username=root
password=password
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
connectionProperties=useUnicode=true;characterEncoding=UTF-8
defaultAutoCommit=true
defaultReadOnly= defaultTransactionIsolation=READ_COMMITTED