java數據庫訪問優化(mysql為例)
阿新 • • 發佈:2019-04-11
獲取 cat rep 錯誤 param count 實現 conf ==
1.編寫屬性文件
為了便於後期維護,在編寫DBUtil工具類之前,通常將連接的數據庫的參數信息保存在屬性文件中。
在項目的根目錄下創建一個config目錄,並添加一個屬性文件mysql.properties,該文件是以"鍵-值"對形式來保存連接Oracle數據庫的配置信息,內容格式如下:
driver= ...
url= ...
user= ...
password= ...
為了讀取屬性文件中的配置信息,需要編寫一個Config類,在該類中通過java.util.Properties類的get()方法來獲取指定"鍵"所對應的"值"。
代碼如下:
packagepractice; import java.io.*; import java.util.*; public class Config { private static Properties p=null; static { try { p =new Properties(); p.load(new FileInputStream("配置文件存在路徑mysql.properties")); }catch(Exception e) { e.printStackTrace(); } }public static String getValue(String key){ return p.getProperty(key).toString(); } }
2.編寫DBUtil類
主要實現數據庫連接,釋放資源,查詢,增刪改操作。
代碼如下:
package practice; import java.sql.*; public class DBUtil { Connection conn=null; PreparedStatement pstmt=null; ResultSet rs=null; /*得到數據庫連接*/ public Connection getConnection() throws Exception{ String driver=Config.getValue("driver"); String url=Config.getValue("url"); String user=Config.getValue("user"); String pwd=Config.getValue("password"); System.out.println("driver :"+driver); System.out.println("url :"+url); System.out.println("user :"+user); System.out.println("pwd :"+pwd); try{ Class.forName(driver); conn=DriverManager.getConnection(url,user,pwd); return conn; }catch(Exception e) { throw new SQLException("驅動錯誤或連接錯誤!"); } } /*釋放資源*/ public void closeAll() { if(rs!=null) { try { rs.close(); }catch(Exception e) { e.printStackTrace(); } } if(pstmt!=null) { try { pstmt.close(); }catch(Exception e) { e.printStackTrace(); } } if(conn!=null) { try { conn.close(); }catch(Exception e) { e.printStackTrace(); } } } /*執行SQL語句,可以進行查詢*/ public ResultSet executeQuery(String preparedSql ,String[] param) { try { pstmt=conn.prepareStatement(preparedSql); if(param!=null) { for (int i=0;i<param.length;i++) { pstmt.setString(i+1,param[i]); } } rs=pstmt.executeQuery(); }catch(Exception e) { e.printStackTrace(); } return rs; } /*執行SQL語句,可以進行贈,刪,改的操作,不能執行查詢*/ public int executeUpdate (String prepareSql , String[] param) { int num=0; try { pstmt=conn.prepareStatement(prepareSql); if(param!=null) { for (int i=0;i<param.length;i++) { pstmt.setString(i+1,param[i]); } } num=pstmt.executeUpdate(); }catch(Exception e) { e.printStackTrace(); } return num; } }
3.使用DBUtil類
代碼如下:
package practice; import java.sql.*; public class DBDmo { public static void main(String args[]) { String selectSql="select id,username,password,sex from userdetails"; String insertSql="insert into userdetails(id,username,password,sex) values(?,?,?,?)"; String updateSql="update userdetails set password=? where username=?"; String deleteSql="delete from userdetails where username=?"; DBUtil db=new DBUtil(); try { //連接數據庫 db.getConnection(); //查詢並顯示原來的數據 ResultSet rs=db.executeQuery(selectSql, null); System.out.println("----原來數據----"); while(rs.next()) { System.out.println("行" +rs.getRow() +":" + rs.getInt(1)+ "\t" +rs.getString(2)+"\t"+rs.getString(3)+"\t" +(rs.getInt(4)==1? "男":"女")); } System.out.println("------------"); //執行添加 int count=db.executeUpdate(insertSql, new String[] {"9","Rose","123456","0"}); System.out.println("添加"+count+"行!"); count=db.executeUpdate(updateSql, new String[] {"686868","Tom"}); System.out.println("修改"+count+"行!"); //執行刪除 count=db.executeUpdate(deleteSql,new String[] {"lisi"}); System.out.println("刪除"+count+"行!"); //查詢並顯示更新後的數據 rs=db.executeQuery(selectSql, null); System.out.println("----更新後的數據-----"); while(rs.next()) { System.out.println("行"+rs.getRow()+":"+rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t" +(rs.getInt(4)==1? "男":"女")); } System.out.println("---------\n"); }catch(Exception e) { e.printStackTrace(); }finally { db.closeAll(); } } }
java數據庫訪問優化(mysql為例)