1. 程式人生 > >java PreparedStatement操作資料庫的使用方法

java PreparedStatement操作資料庫的使用方法

PreparedStatement介面繼承自Statement介面,PreparedStatement比普通Statement物件使用起來更加靈活更有效率.並且比Statement更加安全,因為Statement有一個漏洞就是可以sql注入

第一步:建立PreparedStatement物件

PreparedStatement  pstm 同樣是通過Connection的preparedStatement(sql)方法來建立物件,sql語句可具有一個或者多個輸入引數,這些輸入引數的值在SQL語句建立時未被指定,而是為每個輸入引數保留一個問號'?'作為佔位符;

示例:

下面的建立語句中就帶有3個輸入引數的SQL語句  pstm=con.prepareStatement("update dog set health=?,love=? where id =?");

第二步:設定每個輸入引數的值 

通過呼叫set*()方法來完成(*代表資料型別)

程式碼:

pstm.setInt(1,10);

pstm.setInt(2,90);

pstm.setString(3,"d1");

(注意事項:佔位符位置從1開始)

第三步:執行SQL語句 

執行方法與Statement一樣.比如:pstm.executeUpdate(); 

優點: 建立PreparedStatement物件時會對SQL語句進行預編譯,所以執行速度要快於Statement物件,因此,如果程式中存在需要多次執行SQL語句時,應該使用PreparedStatement物件來執行資料庫操作,以提高效率

示例: 

String sql="update dog set health=?,love=? where id =?"; 

pstm=con.prepareStatement(sql); 

pstm.setInt(1,10);

pstm.setInt(2,90);

pstm.setString(3,"d1");

pstm.executeUpdate();

pstm.setInt(1,22);

pstm.setInt(2,33);

pstm.setString(3,"d2");

pstm.executeUpdate(); 

總結: 

PreparedStatement比Statement好在哪裡?

 1:提高了程式碼的可讀性和可維護性

雖然使用PreparedStatement來代替Statement會多幾行程式碼,但避免了繁瑣麻煩又容易出錯的SQL語句憑藉,提高了程式碼的可讀性和可維護性

 2:提高了SQL語句執行的效能 

建立Statement物件時不使用SQL語句做引數,不會解析和編譯SQL語句,每次呼叫方法執行SQL語句時都要進行SQL語句解析和編譯操作,即操作相同僅僅的資料不同. 建立PreparedStatement物件時使用SQL語句做引數,會解析和編譯該SQL語句,也可以使用帶佔位符的SQL語句做引數,在通過set*()方法給佔位符賦值後執行SQL語句時無需再次解析和編譯SQL語句,直接執行即可,多次執行相同操作可以大大提高效能

 3:提高了安全性

PreparedStatement使用預編譯語句,傳入的任何資料都不會和已經預編譯的SQL語句進行拼接,避免了SQL注入攻擊