【JavaEE】SQLException:Generated keys not requested. You need to specify Statement.RETURN_GE

本文介绍了一种在使用PreparedStatement执行插入操作时遇到的java.sql.SQLException: Generated keys not requested错误,并给出了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误:java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate(), Statement.executeLargeUpdate() or Connection.prepareStatement().

背景:今天在做数据库连接池时报了个错误,如下图1所示:


图1

代码如下:

<span style="white-space:pre">		</span>1<span style="white-space:pre">	</span>conn = JdbcUtils_DBCP.getConnection();
		2	String sql  = "INSERT INTO persons(firstname) VALUES(?)";
		3	st = conn.prepareStatement(sql);//这行代码如果是使用mysql-connector-java-5.1.**的包会报这样的错误
			st.setString(1, "Wang");
			st.executeUpdate();
			
			rs = st.getGeneratedKeys();
按照错误提示:第三行代码加上Statement.RETURN_GENERATED_KEYS,改成st = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);就没有问题。

因为开发中遇到了这个问题,在此记录一下,希望大家遇到同样问题时能够快速解决。


根据提供的引用内容,出现`org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)`错误是因为MyBatis无法找到指定的绑定语句。这通常是由于以下原因之一引起的: 1. 绑定语句的命名错误:请确保在Mapper XML文件中正确定义了`findAllPublishers`绑定语句,并且没有拼写错误或大小写错误。 2. Mapper接口方法与绑定语句不匹配:请确保Mapper接口中的方法名称与Mapper XML文件中的绑定语句名称完全一致。 3. Mapper XML文件未正确加载:请确保Mapper XML文件已正确配置并加载到MyBatis的配置文件中。 为了解决这个问题,你可以按照以下步骤进行操作: 1. 检查Mapper XML文件中是否正确定义了`findAllPublishers`绑定语句,并且没有拼写错误或大小写错误。 2. 检查Mapper接口中的方法名称是否与Mapper XML文件中的绑定语句名称完全一致。 3. 确保Mapper XML文件已正确配置并加载到MyBatis的配置文件中。 4. 如果以上步骤都没有解决问题,可以尝试重新编译和部署项目,以确保所有文件都正确加载。 下面是一个示例代码,演示了如何使用MyBatis执行`findAllPublishers`绑定语句: ```java SqlSession sqlSession = MybatisUtils.getSqlSession(); PublisherMapper mapper = sqlSession.getMapper(PublisherMapper.class); List<Publisher> publishers = mapper.findAllPublishers(); System.out.println(publishers); sqlSession.close(); ``` 请注意,上述代码假设你已经正确配置了MyBatis的环境和数据库连接,并且已经定义了`findAllPublishers`绑定语句。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值