DB2 完整支援 JDBC,無需預編譯/綁定,純動態 SQL。核心流程如下:
Class.forName("com.ibm.db2.jcc.DB2Driver"); // 建議用 JCC Type 4 驅動
String url = "jdbc:db2://host:port/dbname";
Connection con = DriverManager.getConnection(url, user, password);
Statement stmt = con.createStatement();
// 或 PreparedStatement pstmt = con.prepareStatement(sql);
// 或 CallableStatement cstmt = con.prepareCall("{call proc(?,?)}");
// 查詢
ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEE");
// 更新/插入/刪除/ DDL
int count = stmt.executeUpdate("UPDATE EMPLOYEE SET SALARY = SALARY * 1.1");
ResultSetMetaData rsmd = rs.getMetaData();
int colCount = rsmd.getColumnCount();
for (int i = 1; i <= colCount; i++) {
System.out.print(rsmd.getColumnLabel(i) + "\t");
}
System.out.println();
while (rs.next()) {
for (int i = 1; i <= colCount; i++) {
System.out.print(rs.getString(i) + "\t");
}
System.out.println();
}
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (con != null) con.close();
| 方法 | 說明 |
|---|---|
setMaxRows(int) | 限制結果集最大行數 |
setQueryTimeout(int) | 語句執行超時秒數 |
setEscapeProcessing(boolean) | 是否啟用 JDBC 轉義語法處理 |
setFetchSize(int) | 提示驅動每次抓取行數(影響網絡往返) |
setFetchDirection(int) | 結果集游標方向(FORWARD/REVERSE/UNKNOWN) |
CLI 是 DB2 提供的 C/C++ 級動態 SQL 接口,通過函數調用嵌入宿主語言,非新查詢語言。核心特點:
SQLExecDirect、SQLPrepare/SQLExecute、SQLBindParameter、SQLFetch 等核心函數。Java 開發首選 JDBC;若需極致性能或混語言環境,可考慮 CLI/ODBC。
PreparedStatement 防注入、利用計劃緩存。OFFSET ... FETCH NEXT ... 或游標。con.setAutoCommit(false),業務完成 commit(),異常 rollback()。