2008年8月21日 星期四

JAVA --- Statement與PreparedStatement的差別

首先先分別展示Statement與PrepareStatement兩者用法上的差異.
Statement:
...
String strsql = "insert into mytable(Name, Birthday) values("SHAGIN45","1984/06/07")";
Statement mysta = new Statement();
mysta.executeUpdate(strsql);
...

PreparedStatement:
...
String strsql = "insert into mytable(Name, Birthday) values(?,?)";
PreparedStatement mysta = new PrepareStatement();
mysta.setString(1,"SHAGIN45");
mysta.setString(2,"1984/06/07");
mysta.executeUpdate();

從上面兩個例子,可以很明顯的看出兩者使用上的不同,當你所執行sql不需要設定參數時,你就可以使用Statement.反之,若是你需要自行在適當的時機,設定相對應的參數時,則可以使用PrepareStatement (而且PrepareStatement的sql語法使用上閱讀性比較好).

在網路上有許多人在討論PrepareStatement跟Statement兩者間的效能差異,PreparedStatement在Oracle上的表現比Statement來的好(在MySQL上似乎就看不出兩者的性能優劣),並且當要重複執行同一sql多次時,PreparedStatement也會表現的比Statement來的好.但是,由於PreparedStatement的sql是可以自行設定參數型態,因此當sql要被傳至DB執行時,其還需進行編碼轉換,而Statement只需對已經寫死的sql進行字串轉換,所以以單純的查詢動作來說,Statement的表現可能還會比PreparedStatement表現來的好. 總歸一句,除了看你使用PreparedStatement或是Statement會影響DB的存取效能外,你所使用的JDBC Deiver與SQL語法也都會影響,因此遇到需要重複執行sql或是要自訂參數時,我建議使用PreparedStatement;只需要對DB進行簡單的查詢時,我則建議使用Statement!

reference:
http://ivanl.javaeye.com/blog/49129
http://www.javaeye.com/topic/5631

End~

沒有留言: