我是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驱动程序。我对么?因为我没有在我的项目中添加任何其他驱动程序。
- >没有自动生成密钥,整个过程运行正常。
答案 0 :(得分:3)
可能您的Java和ojdbc版本不匹配。由于JDBC是JavaSE的一部分,因此您的JavaSE版本和ojdbc版本必须匹配。
ojdbc14→Java 1.4
ojdbc5→Java 1.5
ojdbc6→Java 1.6
如果您的ojdbc驱动程序比JavaSE版本更新,那么事情应该仍然有效。您可以从中获取Oracle JDBC驱动程序 Oracle Download page。不幸的是,你不会在Maven中心找到它们,所以你需要手动将它们部署到Maven资源库。
如果要搜索ojdbc驱动程序依赖项,请使用
mvn dependency:tree
如果它不在那里并且没有与您的工件(WAR或EAR)一起打包,则它可能来自您的应用程序服务器或类似工具。