最近将以前写的代码重构了一遍,在重构的过程中一时兴起将mysql的jar包由5.0.4更新为5.1.16,启动项目后发现出现了一些异常情况。
首先是在插入数据的时候获得主键时抛出异常:org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL []; SQL state [S1009]; error code [0]; Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().; nested exception is java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().
解决方法:
将PreparedStatement ps = con.prepareStatement(sql);修改为
PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
return ps;
}
}, keyHolder);
其次就是在同一张表进行连接查询时老是抛出找不到列的异常:
Nested in org.springframework.jdbc.InvalidResultSetAccessException: 列名无效; nested exception is java.sql.SQLException: 列名无效:java.sql.SQLException: 列名无效
该查询的sql语句为:select t1.a, t1.b, t1.c, t1.d, t1.e, t2.a x, t2.b y, t2.c z, from table_a t1 left join table_a t2 on t1.c = t2.a where t1.a=?
SqlRowSet srs = jdbcTemplate.queryForRowSet(sql);
if(srs.next()){
...
srs.getInt("x");
...
}
在执行到srs.getInt("x")代码时就抛出上述异常了,事实上是所有的t2列都出现列名无效的错误,该问题还没有解决掉,但将jar包换回之前的版本5.0.4就一切正常了。
这次汲取了一个经验:不到万不得已的情况下不要轻易的将项目的环境升级,如果实在要升级也要将项目中与升级了的相关功能模块重新测试一编。
分享到:
相关推荐
5. **最佳实践**:为了保证项目的安全性和可维护性,建议使用最新的稳定版本的MySQL jar包,同时定期检查并更新以获取最新特性、修复和安全补丁。在生产环境中,不要忘记配置连接池以提高性能和资源利用率。 总之,...
mysql57驱动jar包mysql57驱动jar包mysql57驱动jar包mysql57驱动jar包mysql57驱动jar包mysql57驱动jar包mysql57驱动jar包mysql57驱动jar包mysql57驱动jar包mysql57驱动jar包mysql57驱动jar包mysql57驱动jar包mysql57...
使用这两个jar包时,确保它们与你的MySQL服务器版本匹配。不匹配的驱动可能会导致连接问题或者无法使用特定的新功能。同时,为了保持应用的兼容性和稳定性,建议定期更新驱动到最新版本,以获取性能提升和安全补丁。...
这个压缩包包含了多个版本的MySQL连接jar包,为开发者提供了方便,可以根据项目的具体需求选择合适的版本。 1. JDBC驱动介绍: JDBC是Java编程语言和各种数据库之间的标准接口,它允许Java应用程序通过编写Java...
MySQL 5.7 jar包是Java开发者用于与MySQL 5.7数据库进行交互的重要组件。这个jar文件,即`mysql-connector-java-5.7.jar`,包含了MySQL JDBC驱动程序,使得Java应用程序能够通过Java Database Connectivity (JDBC) ...
mysql8.0版本jdbc驱动jar包,支持mysql8.0新版本驱动。。
在Java应用中连接MySQL数据库,通常需要MySQL的JDBC(Java Database Connectivity)驱动,也就是我们所说的“mysql8的驱动jar包”。这个jar包提供了Java应用程序和MySQL数据库之间的通信桥梁,使得数据的读取、写入...
- 确保jar包版本与MySQL服务器版本兼容,否则可能引发兼容性问题。 - 定期更新jar包至最新稳定版本,以获取安全修复和性能改进。 - 在生产环境中,考虑使用加密的连接(SSL)以增强数据安全性。 - 配置合适的...
这是MySQL 5.7版本以上数据库的连接驱动jar包,对应加载驱动程序代码: Class.forName("com.mysql.cj.jdbc.Driver"); 该驱动包适用于Java web开发,连接MySQL数据库时导入工程。 参考代码: Class.forName(...
这篇文档将深入探讨MySQL连接驱动jar包的相关知识点,包括其作用、安装与配置、使用方法以及常见问题。 首先,了解MySQL连接驱动的作用。当Java程序需要访问MySQL数据库时,必须加载对应的JDBC驱动,即mysql-...
JDBC(Java Database Connectivity)是Java语言与数据库交互的标准API,而驱动jar包(如mysql-connector-java.jar)则是实现JDBC功能的库,提供了连接、查询、更新等数据库操作的功能。在Java项目中,你需要将这个...
需要注意的是,不同的 MySQL 版本可能需要不同版本的 JDBC 驱动,因此确保驱动版本与 MySQL 服务器版本兼容是非常重要的。此外,如果你的测试环境中使用了 SSL 连接,还需要额外配置 SSL 相关的参数。 通过以上步骤...
MySQL8.0.32安装程序和jar包,适用于各类研发人员进行快速安装和java中快速使用 压缩包中包括两部分: mysql-connector-j-8.0.32.jar mysql-installer-community-8.0.32.0
为了与MySQL进行交互,开发者通常需要在应用程序中包含特定的Java数据库连接(JDBC)驱动,也就是jar包。本资源包含了多个版本的MySQL JDBC驱动,使得开发者可以根据项目的实际需求选择合适的版本。 1. **JDBC驱动...
mysql57、8驱动jar包,亲测可用
mysql-connector-java-8.0.27 jar包 mysql-connector-java-8.0.27 jar包 mysql-connector-java-8.0.27 jar包 mysql-connector-java-8.0.27 jar包 mysql-connector-java-8.0.27 jar包 mysql-connector-java-8.0.27 ...
java连接mysql5.5的jar包 mysql-connector-java-5.1.35-bin.jar
总的来说,MySQL的32位版本、Java的jar包和32位Navicat构成了一套完整的数据库管理和开发工具链。它们共同服务于数据存储、处理和管理,适用于各种规模的项目,无论是简单的个人项目还是大型的企业级应用。在实际...