mysql获取自动生成的主键报错:Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.execu

今天项目中需要获取刚插入的自动增长 的主键值:

pstmt=conn.prepareStatement(sql);
...
rs=pstmt.getGeneratedKeys();

谁知道报错:Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.execu

上网查了之后才知道原来是5.1.5的包,替换成5.1.17之后,如下生成主键的代码都会报错:

Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

将代码修改成这样就不会报错:

pstmt=conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
rs=pstmt.getGeneratedKeys();

原因是:貌似从5.1.7版本之后的mysql-connector增加了返回GeneratedKeys的条件,如果需要返回GeneratedKeys,则PreparedStatement需要显示添加一个参数Statement.RETURN_GENERATED_KEYS。不过直接报错,不向下兼容也太不厚道了。

时间: 2024-10-13 19:36:28

mysql获取自动生成的主键报错:Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.execu的相关文章

JDBC 获取自动生成的主键

为什么需要获取自动生成的主键 例如: 原文地址:https://www.cnblogs.com/wbyixx/p/12129054.html

JDBC学习笔记(6)——获取自动生成的主键值&处理Blob&数据库事务处理

获取数据库自动生成的主键 [孤立的技术是没有价值的],我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. 具体的代码实现: 1 /** 2 * 获取数据库自动生成的主键 3 */ 4 @Test 5 public void testGetKeyValues(){ 6 Connection connection=null; 7 PreparedStatement preparedStatement=null; 8 ResultSet rs=n

javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键

测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: 1 package me.gacl.demo; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import me.gacl.utils.JdbcU

获取自动生成的主键

步骤:        1)设置需要返回生成的主键,[通过preparedStatement的第二个参数]            PreparedStatement prepareStatement(String sql, int autoGeneratedKeys);//创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键            参数:                autoGeneratedKeys - 指示是否应该返回自动生成的键的标志,     

(jdbc)取得数据库自动生成的主键方法

一些类,在前面的博客中有,就不重复了 public class Test2 { TestDAO t=new TestDAO(); /*前提是数据表的主键是自动增加的, *取得数据库自动生成的主键 * */ @Test public void testGetKeyValues() throws Exception{ Connection connection=null; PreparedStatement preparedStatement=null; try { String sql="inse

得到数据库自动生成的主键值

package com.atguigu.jdbc; import java.sql.Connection;import java.sql.Date;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.Statement; import org.junit.Test; public class JDBCTest { /** * 得到

PowerDesigner中表名过长,自动生成的主键名截取的问题

在PowerDesinger中,若表名过长,自动生成的主键名会被自动截取. 解决如下:DataBase/Edit Current DBMS/Scripts/Objects/PKey/ConstName中找到Value的值,默认是 PK_%.U27:TABLE%,U27表示截取27个字符.改成PK_%TABLE%主键名就不会被截取了. 同理,对生成的约束名常常因为截断字符串而导致重名错误,可以放开. DataBase/Edit Current DBMS/Scripts/Objects/Refere

mysql无法启动问题的解决方案:mysql.sock重启不自动生成,mysqld_safe启动报错

mysql无法启动问题的解决方案:mysql.sock重启不自动生成,mysqld_safe启动报错 - superlucky 时间 2013-08-03 11:55:00 博客园-原创精华区 原文  http://www.cnblogs.com/super-lucky/p/superlucky.html 主题 MySQL 本人还是个菜鸟,下面是我的经验之谈,能解决一些问题,有不对的地方,敬请斧正. 我的是CentOS6.3+MySQL5.1.57. 重启了一次服务器后, 使用> mysql -

javaWeb_JDBC_JDBC获取数据库自动生成的主键值

JDBC_JDBC获取数据库自动生成主键值 1.意义: 在操作比较复杂的数据库表以及相关信息的时候,我们需要获取一条记录中的主键值,以便于别的业务逻辑操作该条记录,那么这一个时候 如果是数据库自己生成主键值,那么我们就有必要获取这一个主键值. 2.实现: 使用重载的 prepareStatement(sql, flag)来生成 PreparedStatement 对象,并调用ResultSet rs = preparedStatement.getGeneratedKeys(); 在 Result