我是spring框架的新手,并尽我所能理解。
我正在使用Spring NamedParameterJDBC模板进行操作

我在DAO中有此代码

SqlParameterSource paramSource = new BeanPropertySqlParameterSource(
            positionDO);
KeyHolder keyHolder = new GeneratedKeyHolder();
return this.jdbcTemplate.update(sql, paramSource, keyHolder);


问题是当我执行时,出现此错误

 org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL
[INSERT INTO POSITION_TABLE VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)]; SQL state [null];
error code [0];
java.lang.AbstractMethodError: oracle.jdbc.driver.OracleConnection.prepareStatement(Ljava/lang/String;I)
Ljava/sql/PreparedStatement;


我搜索了一下,发现这是旧的Ojdbc驱动程序(例如ojdbc14)的问题,这些驱动程序不发送自动生成的密钥。
现在我找不到通过Spring加载最新的ojdbc驱动程序的方法或执行相同操作的任何其他方法。

我假设spring-jdbc将具有默认的ojdbc驱动程序。我对么?因为我没有在项目中添加任何其他驱动程序。

->如果没有自动生成密钥,则整个过程运行良好。

最佳答案

您的Java和ojdbc版本可能不匹配。由于JDBC是JavaSE的一部分,因此您的JavaSE版本和ojdbc版本必须匹配。

ojdbc14→Java 1.4

ojdbc5→Java 1.5

ojdbc6→Java 1.6

如果您的ojdbc驱动程序比JavaSE版本新,那么一切仍然可以正常进行。您可以从
Oracle Download page。不幸的是,您不会在Maven Central中找到它们,因此需要手动将它们部署到Maven存储库。

如果要搜索ojdbc驱动程序依赖项,请使用

mvn dependency:tree


如果它不存在并且没有与您的工件(WAR或EAR)打包在一起,那么它很可能来自您的应用程序服务器或类似服务器。

10-05 19:00