1. 程式人生 > >java數據庫訪問優化(mysql為例)

java數據庫訪問優化(mysql為例)

獲取 cat rep 錯誤 param count 實現 conf ==

1.編寫屬性文件

為了便於後期維護,在編寫DBUtil工具類之前,通常將連接的數據庫的參數信息保存在屬性文件中。

在項目的根目錄下創建一個config目錄,並添加一個屬性文件mysql.properties,該文件是以"鍵-值"對形式來保存連接Oracle數據庫的配置信息,內容格式如下:

driver= ...
url= ...
user= ...
password= ...

為了讀取屬性文件中的配置信息,需要編寫一個Config類,在該類中通過java.util.Properties類的get()方法來獲取指定"鍵"所對應的"值"。
代碼如下:

 package
practice; 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為例)