繼承 Statement,兩大不同:
setXxx 方法綁定值PreparedStatement pstmt = con.prepareStatement(
"UPDATE table4 SET m = ? WHERE x = ?");
pstmt.setLong(1, 123456789);
pstmt.setLong(2, 100000000);
// 參數索引從 1 開始
綁定後可重複執行,直到呼叫 clearParameters()。
setXxx 的 Xxx 對應 Java 型別,驅動程式自動對應 JDBC 型別setShort(2, 44) → JDBC SMALLINTpstmt.setObject(1, value, Types.VARCHAR); // 第三參數指定目標 JDBC 型別
若省略第三參數,驅動程式用預設對應表。
pstmt.setNull(1, Types.INTEGER); // 必須指定 JDBC 型別
// 或
pstmt.setObject(1, null, Types.INTEGER);
File file = new File("/tmp/data");
try (InputStream fin = new FileInputStream(file)) {
pstmt.setBinaryStream(1, fin, file.length());
pstmt.executeUpdate();
}
三種串流方法:setBinaryStream、setAsciiStream、setUnicodeStream,需提供總長度。
預編譯 SQL 減少資料庫解析開銷,適合重複執行的陳述式。若資料庫/驅動程式不支援陳述式快取,則效能提升不明顯。