首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JDBC 入門教學:PreparedStatement 完整指南

     編輯:Java 相關知識

PreparedStatement 簡介

繼承 Statement,兩大不同:

  1. 包含預編譯 SQL,執行效率高
  2. SQL 可含 IN 參數佔位符 (?),執行前由 setXxx 方法綁定值

建立 PreparedStatement

PreparedStatement pstmt = con.prepareStatement(
    "UPDATE table4 SET m = ? WHERE x = ?");

綁定 IN 參數

pstmt.setLong(1, 123456789);
pstmt.setLong(2, 100000000);
// 參數索引從 1 開始

綁定後可重複執行,直到呼叫 clearParameters()。

資料型別一致性

  • setXxx 的 Xxx 對應 Java 型別,驅動程式自動對應 JDBC 型別
  • 範例:setShort(2, 44) → JDBC SMALLINT
  • 建議使用與資料庫欄位精確對應的 JDBC 型別,提高可移植性

使用 setObject 顯式指定 JDBC 型別

pstmt.setObject(1, value, Types.VARCHAR); // 第三參數指定目標 JDBC 型別

若省略第三參數,驅動程式用預設對應表。

傳遞 JDBC NULL


pstmt.setNull(1, Types.INTEGER); // 必須指定 JDBC 型別
// 或
pstmt.setObject(1, null, Types.INTEGER);

大型資料傳輸:使用 InputStream


File file = new File("/tmp/data");
try (InputStream fin = new FileInputStream(file)) {
    pstmt.setBinaryStream(1, fin, file.length());
    pstmt.executeUpdate();
}

三種串流方法:setBinaryStream、setAsciiStream、setUnicodeStream,需提供總長度。

效能優勢

預編譯 SQL 減少資料庫解析開銷,適合重複執行的陳述式。若資料庫/驅動程式不支援陳述式快取,則效能提升不明顯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved