0

我是 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;

我用谷歌搜索,发现这是像 ojdbc14 这样的旧 Ojdbc 驱动程序的问题,它不发送自动生成的密钥。现在我无法找到如何通过 Spring 或任何其他方式加载最新的 ojdbc 驱动程序来执行相同的操作。

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

--> 没有自动生成密钥,整个过程工作正常。

4

1 回答 1

3

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

ojdbc14 → Java 1.4

ojdbc5 → Java 1.5

ojdbc6 → Java 1.6

如果您的 ojdbc 驱动程序比您的 JavaSE 版本更新,那么一切应该仍然有效。您可以从 Oracle 下载页面获取 Oracle JDBC 驱动程序。不幸的是,您不会在 Maven 中心找到它们,因此您需要手动将它们部署到您的 Maven 存储库。

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

mvn dependency:tree

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

于 2012-07-11T16:19:13.037 回答