JDBC API 雖不大,但類與方法眾多。本文系統梳理四類驅動架構與七大核心接口/類的關鍵方法,構建速查手冊,適合開發時快速查閱、面試複習、教學大綱編寫。
| 類型 | 名稱 | 架構流向 | 特點 | 適用場景 |
|---|---|---|---|---|
| Type 1 | JDBC-ODBC Bridge | App → JDBC-ODBC Bridge → ODBC Library → ODBC Driver → DB | 需客戶端裝 ODBC 驅動;JDK 內置 sun.jdbc.odbc;JDK 8 移除 |
快速原型、無 JDBC 驅動的庫 |
| Type 2 | JDBC-Native API Bridge | App → JDBC Driver → Native DB Library → DB | 需客戶端裝 DB 客戶端庫;性能優於 Type 1 | 早期 Oracle OCI 驅動等 |
| Type 3 | JDBC-Middleware (Net Protocol) | App → JDBC Driver → Java Middleware Server → JDBC Driver → DB | 客戶端零安裝;中間件統一轉換;靈活性最高;通常最小 | 三層架構、防火牆環境、非 DB 廠商提供 |
| Type 4 | Pure Java Driver (Thin Driver) | App → JDBC Driver → DB Engine → DB | 純 Java,零安裝,直通 DB 引擎協議;最高性能;支援 Internet 部署 | 現代生產環境主流選擇 |
Class.forName(String driver):加載註冊驅動static Connection getConnection(url, user, pwd):獲取連接static Driver getDriver(url):查找能打開指定 URL 的驅動Statement createStatement() / createStatement(resultSetType, resultSetConcurrency)PreparedStatement prepareStatement(sql)DatabaseMetaData getMetaData()boolean getAutoCommit() / void setAutoCommit(boolean)void commit() / void rollback()void close() / boolean isClosed()ResultSet 類型與併發性常量:
TYPE_FORWARD_ONLY、TYPE_SCROLL_INSENSITIVE、TYPE_SCROLL_SENSITIVECONCUR_READ_ONLY、CONCUR_UPDATABLEResultSet executeQuery(sql):SELECTint executeUpdate(sql):INSERT/DELETE/UPDATEvoid close()ResultSet executeQuery() / int executeUpdate()ResultSetMetaData getMetaData()setInt(index, x)、setFloat(index, x)、setString(index, x)setDate(index, x)、setTime(index, x)、setTimestamp(index, x)setNull(index, sqlType)、setBoolean(index, x)、setBigDecimal(index, x)setBytes(index, x)、setBlob(index, x)、setClob(index, x)void addBatch() / int[] executeBatch():批量執行void clearParameters()String getDatabaseProductName() / getDatabaseProductVersion()String getDriverName() / getDriverVersion()String getURL() / String getUserName()ResultSet getTables(catalog, schema, tableNamePattern, types[])ResultSet getColumns(catalog, schema, table, columnPattern)ResultSet getPrimaryKeys(catalog, schema, table)ResultSet getImportedKeys/ExportedKeys/CrossReference(...)boolean next()、boolean previous()boolean first()、boolean last()boolean absolute(row)、void beforeFirst()、void afterLast()boolean relative(rows)getInt()、getLong()、getString()、getDate()、getTimestamp()、getBigDecimal()、getBoolean()、getBytes()、getBlob()、getClob()、getObject()CONCUR_UPDATABLE):
void updateXxx(column, value)void insertRow()、void updateRow()、void deleteRow()void moveToInsertRow()、void moveToCurrentRow()ResultSetMetaData getMetaData() / void close()int getColumnCount()String getColumnName(index) / getColumnLabel(index)int getColumnType(index) / String getColumnTypeName(index)int getPrecision(index) / int getScale(index)String getTableName(index)boolean isNullable(index) / boolean isCaseSensitive(index) / boolean isReadOnly(index) / boolean isAutoIncrement(index)PreparedStatement 批量、DataSource/JNDI、連接池標準Savepoint、參數元數據、BOOLEAN 類型、自動生成鍵獲取RowId、National Character 類型、try-with-resources 支援、LargeUpdateCount、Sharding 支援JDBC 核心 API 小而精。掌握四類驅動架構演進邏輯與七大接口關鍵方法,即持有 Java 數據訪問的「速查地圖」。實戰中配合 IDE 自動補全、連接池監控、SQL 執行計劃分析,方能寫出高性能、健壯、可維護的數據訪問代碼。