JDK 8 起移除,需配置系統 DSN,性能差、平台相關、不支持高級特性。
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:test1"; // 系統 DSN 名稱
String user = "scott";
String pwd = "tiger";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, pwd);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM emp");
缺點:雙重轉換 (JDBC→ODBC→Oracle Net),需客戶端安裝 Oracle Client + ODBC 驅動,部署極其麻煩。
純 Java 實現,無需 Oracle Client,通過 TCP/IP 直連監聽器,支持所有 JDBC 4.x 特性。
String driver = "oracle.jdbc.OracleDriver"; // 10g+ 統一類名
String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // SID 格式
// 或 Service Name 格式 (推薦 RAC/PDB)
String url = "jdbc:oracle:thin:@//host:1521/pdb1.service";
String user = "scott";
String pwd = "tiger";
Class.forName(driver);
try (Connection conn = DriverManager.getConnection(url, user, pwd);
PreparedStatement ps = conn.prepareStatement("SELECT * FROM emp WHERE deptno = ?")) {
ps.setInt(1, 10);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println("Name: " + rs.getString("ename"));
}
}
}
| 維度 | Statement | PreparedStatement |
|---|---|---|
| SQL 解析 | 每次執行都硬解析 | 預編譯一次,多次執行復用計劃 |
| 綁定變量 | 不支持,需拼接字符串 | 支持 setXxx(),防 SQL 注入 |
| 批處理 | addBatch(String sql) | addBatch() + 綁定變量,性能高 10x+ |
| 計劃緩存 | 庫緩存壓力大 | 游標共享,減少 Hard Parse |
HikariConfig cfg = new HikariConfig();
cfg.setJdbcUrl("jdbc:oracle:thin:@//prod-scan:1521/pdb1.service");
cfg.setUsername("app_user");
cfg.setPassword("***");
cfg.setMaximumPoolSize(20);
cfg.setMinimumIdle(5);
cfg.setConnectionTimeout(5000);
cfg.setIdleTimeout(300000);
cfg.setMaxLifetime(1800000);
cfg.addDataSourceProperty("oracle.net.CONNECT_TIMEOUT", "5000");
cfg.addDataSourceProperty("oracle.jdbc.ReadTimeout", "30000");
DataSource ds = new HikariDataSource(cfg);
// SCAN + 負載均衡 + 故障轉移
jdbc:oracle:thin:@(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCPS)(HOST=scan1)(PORT=1522))
(ADDRESS=(PROTOCOL=TCPS)(HOST=scan2)(PORT=1522))
(ADDRESS=(PROTOCOL=TCPS)(HOST=scan3)(PORT=1522))
(LOAD_BALANCE=on)
(FAILOVER=on)
)
(CONNECT_DATA=(SERVICE_NAME=pdb1.service))
)
ojdbc11.jar (JDK 11/17/21)ojdbc8.jar (JDK 8)com.oracle.database.jdbc:ojdbc11:23.4.0.0