使用 GeoTools DataStore.getFeatureWriterAppend(tableName, Transaction.AUTO_COMMIT) 寫入 Oracle,表名帶下劃線 (如 GIS_ROADS) 時報錯,純字母表名正常。
ojdbc:ojdbc:14 (Oracle 10g 時代產物)。ojdbc6.jar (JDK 6/7/8) 或 ojdbc8.jar (JDK 8+)。舊版 ojdbc14.jar 對 Oracle 11g+ 的標識符引用規則支持不全:表名含下劃線、大小寫混合、超過 30 字符等標識符在元數據查詢、PreparedStatement 綁定時解析異常,導致 GeoTools 通用寫入路徑失敗。
<!-- 移除舊坐標 -->
<dependency>
<groupId>ojdbc</groupId>
<artifactId>ojdbc</artifactId>
<version>14</version>
</dependency>
<!-- 引入 Oracle 官方 Maven 坐標 (需配置 Oracle Maven 存儲庫或手動安裝) -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
<!-- 或使用第三方鏡像坐標 (如中央庫可用) -->
<dependency>
<groupId>cn.guoyukun.jdbc</groupId>
<artifactId>oracle-ojdbc6</artifactId>
<version>11.2.0.3.0</version>
</dependency>
mvn dependency:tree 確認無 ojdbc:ojdbc:14 殘留。GIS_ROADS、USER_DATA_2023 等均成功寫入。OracleNGDataStoreFactory (GeoTools 20+),支援空間索引、SRID 自動處理。HikariCP,參數 maxPoolSize=20、connectionTimeout=30s。Transaction.AUTO_COMMIT 並定期 commit(),避免大事務鎖表。Charset.forName("GBK") (中文屬性字段常見)。**驅動版本匹配數據庫版本是 JDBC 穩定性的基石**。舊驅動在新庫上可能運行但暗藏元數據解析、標識符轉義、類型映射等隱患。定期對齊 ojdbc6/8 版本與 Oracle 數據庫版本,納入依賴升級例行檢查清單。