使用 GeoTools 將 Shapefile 導入 Oracle 空間資料庫時,若目標表名包含底線(如 MY_TABLE),呼叫 DataStore.getFeatureWriterAppend() 會拋出例外,導入失敗。
DataStore dsOracle = ...; FeatureWriterwriter = dsOracle.getFeatureWriterAppend("MY_TABLE", Transaction.AUTO_COMMIT); // 失敗
經查證為 Oracle JDBC 驅動版本過舊。專案原使用 Maven 中央倉庫的 ojdbc:ojdbc:14(對應 Oracle 10g 時代的 ojdbc14.jar),不支援 Oracle 11g/12c 的某些元資料查詢語法,導致含底線表名的識別失敗。
<!-- Oracle 11g 環境建議 ojdbc6 --> <dependency> <groupId>cn.guoyukun.jdbc</groupId> <artifactId>oracle-ojdbc6</artifactId> <version>11.2.0.3.0</version> </dependency> <!-- Oracle 12c/18c/19c 環境建議 ojdbc8 --> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.3.0.0</version> </dependency>


pom.xml 依賴mvn clean compile 重新建構ojdbc14 僅支援 JDK 1.4/1.5,已停止維護ojdbc6 支援 JDK 6/7,對應 Oracle 11.2.0.3ojdbc7 支援 JDK 7/8,對應 Oracle 12.1ojdbc8 支援 JDK 8/11/17,對應 Oracle 12.2/18c/19c,新專案首選| JDBC Jar | 支援 JDK | 對應 Oracle DB | 備註 |
|---|---|---|---|
| ojdbc14 | 1.4/1.5 | 10g/11gR1 | 已淘汰 |
| ojdbc6 | 6/7 | 11.2.0.3+ | 舊專案維護用 |
| ojdbc7 | 7/8 | 12.1 | 過渡版本 |
| ojdbc8 | 8/11/17 | 12.2/18c/19c/21c | 推薦新專案 |