Java 程式語言在寫入資料庫有兩種方式 PreparedStatement 與 Statement , [Java] Date Type Write In DataBase 日期型態如何寫入資料庫 一文中有 PreparedStatement 的程式範例, 至於 Statement 的程式碼如下:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public void writeInDB(){
Connection conn = null;
String sql ;
Statement pstmt ;
ResultSet rs;
try {
sql = "Select id,name FROM mydate where id='" + PolinWei + "'";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if ( rs.next() ){
name = rs.getString("NAME");
System.out.println("name: " + name);
}
rs.close();
stmt.close();
} catch (Exception e) {
System.err.println(e);
} finally {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
看似 Statement 比 PreparedStatement 的程式為簡單, 且程式碼較為精簡 , 但若這支程式的使用率很頻繁, 且 WHERE 條件中的值也每次都不一樣時, 建議應使用 PreparedStatement , 因為這會讓後端的資料庫在作 Parse 時, 負載會減輕很多.
附註: 若希望 ResultSet 可以上一筆, 下一筆的查詢. 則在宣告 Statement stmt 時要加入 ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY 這兩個參數, 如:
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
其實PreparedStatement對SQL injection擁有較佳的防護能力,而且SQL指令如果是超級長,要維護的時候,要在Statement寫法內找出要被維護的參數,會相當的不容易,為了避免自己開發Bugs讓自己Debug,好的習慣是使用PreparedStatement來撰寫程式碼,減少參數型態錯誤的一些小問題,還有Hibernate也是一個不錯的工具
回覆刪除謝謝布丁的補充說明. 至於 Hibernate 本人還沒有涉獵, 改天再向布丁請教
回覆刪除我的blog目前位於http://www.walkone.com.tw/blog/index.jsp?user_id=test
回覆刪除有空可以來看看