實現增刪該查的jdbc封裝
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; public class DbUtil { private static String user = null; private static String password = null; private static String driver = null; private static String url = null; private static Connection conn = null; private static Properties p =null; //單利模式 --懶漢式(雙重鎖定)保證線程的安全性 public static DbUtil db = null; private DbUtil(){ } public static DbUtil getInstance(){ if(db == null){ synchronized(DbUtil.class){ if(db == null){ db = new DbUtil(); } } } return db; } //讀取配置文件且加載數據庫驅動 static{ //實例化一個properties對象用來解析我們的配置文件 p = new Properties(); //通過類加載器來讀取我們的配置文件,以字節流的形式讀取 InputStream in = DbUtil.class.getClassLoader().getResourceAsStream("/config.properties"); try { //將配置文件自如到Propreties對象,來進行解析 p.load(in); //讀取配置文件 driver = p.getProperty("driver"); url = p.getProperty("url"); user = p.getProperty("user"); password = p.getProperty("password"); //加載驅動 Class.forName(driver); } catch (IOException e1) { e1.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } //建立數據庫的連接 public Connection getConn(){ try { return DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); return null; } } //查詢返回List容器 public List<Map<String,Object>> query(String sql,Object...params){ PreparedStatement pst = null; ResultSet rs = null; try { //獲得連接 conn = getConn(); //獲得preparedSttement對象進行預編譯(?占位符) pst = conn.prepareStatement(sql); int paramsIndex = 1; for(Object p : params){ pst.setObject(paramsIndex++, p); } //執行sql語句獲得結果集的對象 rs = pst.executeQuery(); //獲得結果集中列的信息 ResultSetMetaData rst = rs.getMetaData(); //獲得結果集的列的數量 int column = rst.getColumnCount(); //創建List容器 List<Map<String,Object>> rstList = new ArrayList<Map<String,Object>>(); //處理結果 while(rs.next()){ //創建Map容器存取每一列對應的值 Map<String,Object> m = new HashMap<String,Object>(); for(int i=1;i<=column;i++){ m.put(rst.getColumnName(i), rs.getObject(i)); } //將Map容器放入List容器中 rstList.add(m); } return rstList; } catch (SQLException e) { e.printStackTrace(); return null; }finally{ //關閉資源 close(rs, pst, conn); } } public List<Map<String,Object>> query(String sql,List<Object> params){ PreparedStatement pst = null; ResultSet rs = null; try { //獲得連接 conn = getConn(); //獲得preparedSttement對象進行預編譯(?占位符) pst = conn.prepareStatement(sql); int paramsIndex = 1; for(Object p : params){ pst.setObject(paramsIndex++, p); } //執行sql語句獲得結果集的對象 rs = pst.executeQuery(); //獲得結果集中列的信息 ResultSetMetaData rst = rs.getMetaData(); //獲得結果集的列的數量 int column = rst.getColumnCount(); //創建List容器 List<Map<String,Object>> rstList = new ArrayList<Map<String,Object>>(); //處理結果 while(rs.next()){ //創建Map容器存取每一列對應的值 Map<String,Object> m = new HashMap<String,Object>(); for(int i=1;i<=column;i++){ m.put(rst.getColumnName(i), rs.getObject(i)); } //將Map容器放入List容器中 rstList.add(m); } return rstList; } catch (SQLException e) { e.printStackTrace(); return null; }finally{ //關閉資源 close(rs, pst, conn); } } //分頁查詢總共有多少條記錄totleSize public long queryLong(String sql,Object...params){ PreparedStatement pst = null; ResultSet rs = null; try { //獲得連接 conn = getConn(); //獲得preparedSttement對象進行預編譯(?占位符) pst = conn.prepareStatement(sql); int paramsIndex = 1; for(Object p : params){ pst.setObject(paramsIndex++, p); } //執行sql語句獲得結果集的對象 rs = pst.executeQuery(); while(rs.next()){ return Long.valueOf(rs.getLong(1)); } return 0; } catch (SQLException e) { e.printStackTrace(); return 0; } } //插入 public boolean insert(String sql,Object...params){ PreparedStatement pst = null; ResultSet rs = null; try { //獲得連接 conn = getConn(); //獲得PrepareStatement對象進行預編譯 pst = conn.prepareStatement(sql); //處理將數據插入占位符 int paramsIndex = 1; for(Object p : params){ pst.setObject(paramsIndex++, p); } //執行sql語句 pst.executeUpdate(); return true; } catch (SQLException e) { e.printStackTrace(); return false; }finally{ //關閉資源 close(null, pst, conn); } } //修改 public boolean update(String sql,Object...params){ PreparedStatement pst = null; ResultSet rs = null; try { //獲得連接 conn = getConn(); //獲得PrepareStatement對象進行預編譯 pst = conn.prepareStatement(sql); //處理將數據插入占位符 int paramsIndex = 1; for(Object p : params){ pst.setObject(paramsIndex++, p); } //執行sql語句 pst.executeUpdate(); return true; } catch (SQLException e) { e.printStackTrace(); return false; }finally{ //關閉資源 close(null, pst, conn); } } //刪除 public boolean delete(String sql,Object...params){ PreparedStatement pst = null; ResultSet rs = null; try { //獲得連接 conn = getConn(); //獲得PrepareStatement對象進行預編譯 pst = conn.prepareStatement(sql); //處理將數據插入占位符 int paramsIndex = 1; for(Object p : params){ pst.setObject(paramsIndex++, p); } //執行sql語句 pst.executeUpdate(); return true; } catch (SQLException e) { e.printStackTrace(); return false; }finally{ //關閉資源 close(null, pst, conn); } } //關閉資源 public static void close(ResultSet rs,PreparedStatement pst,Connection conn){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } if(pst!=null){ try { pst.close(); } catch (SQLException e) { e.printStackTrace(); } pst = null; } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } }
配置文件config.properties:
user=root password=root driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/cp_data