標籤:blog java os 檔案 資料 io 2014 for
在這次做項目中,我對自己最滿意的就是封裝了一下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