在这次做项目中,我对自己最满意的就是封装了一下SQLHelper类,我对自己感到骄傲主要是
我是初学者,我刚开始不知道可以这样做,我只是想着试着去这样做了,结果真的可以,所以我
在我的模块就自己封装了一个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
JAVA WEB SQLHelper类的封装