PreparedStatement的Batch功能

選擇PreparedStatement仍是Statement取決於你要怎麼使用它們. 對於只執行一次的SQL語句選擇Statement是最好的. 相反, 若是SQL語句被屢次執行選用PreparedStatement是最好的.
PreparedStatement的第一次執行消耗是很高的. 它的性能體如今後面的重複執行.

Update大量的數據時, 先Prepare一個INSERT語句再屢次的執行, 會致使不少次的網絡鏈接. 要減小JDBC的調用次數改善性能, 你可使用PreparedStatement的AddBatch()方法一次性發送多個查詢給數據庫. 例如, 讓咱們來比較一下下面的例子.
Quartz時序調度框架分析

例 1: 屢次執行Prepared Statement html

PreparedStatement ps = conn.prepareStatement(
   "INSERT into employees values (?, ?, ?)");

for (n = 0; n < 100; n++) {

  ps.setString(name[n]);
  ps.setLong(id[n]);
  ps.setInt(salary[n]);
  ps.executeUpdate();
}
例 2: 使用Batch java

PreparedStatement ps = conn.prepareStatement(
   "INSERT into employees values (?, ?, ?)");內陸運輸

for (n = 0; n < 100; n++) {

  ps.setString(name[n]);
  ps.setLong(id[n]);
  ps.setInt(salary[n]);
  ps.addBatch();
}
ps.executeBatch();數據庫

在例 1中, PreparedStatement被用來屢次執行INSERT語句. 在這裏, 執行了100次INSERT操做, 共有101次網絡往返. 其中,1次往返是預儲statement, 另外100次往返執行每一個迭代.
在例2中, 當在100次INSERT操做中使用addBatch()方法時, 只有兩次網絡往返. 1次往返是預儲statement, 另外一次是執行batch命令. 雖然Batch命令會用到更多的數據庫的CPU週期, 可是經過減小網絡往返,性能獲得提升.
記住, JDBC的性能最大的增進是減小JDBC驅動與數據庫之間的網絡通信.網絡

相關文章
相關標籤/搜索