java - SQL 异常,未请求生成的键

标签 java mysql sql jdbc sqlexception

此异常发生在我的代码中提到的部分:

    Connection con = null;
    PreparedStatement ps = null;
    ResultSet rs = null;

String query = "Insert into ...";
try {
        con = DriverManager.getConnection(...);
        ps = con.prepareStatement(query, java.sql.Statement.RETURN_GENERATED_KEYS);
        ps.executeUpdate(query);
        rs = ps.getGeneratedKeys();  // Exception is here
    }

    while (resultset.next()) {
        id = String.valueOf(resultset.getInt(1));
    }

异常(exception):

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

我的目的是插入一条新记录并将第一个字段 (id)(即 auto_increment)保存到变量 id

最佳答案

您使用了错误的execute 方法。您应该使用不带参数的方法,而不是采用 String 的方法。正如 Chris Joslin 提到的,对于 INSERT,最好使用 executeUpdate

从技术上讲,正确的 JDBC 驱动程序应该在调用 execute(String) 或其兄弟之一时立即抛出 SQLException PreparedStatement,但是一些司机忽略了这条规则。

关于java - SQL 异常,未请求生成的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24588095/

相关文章:

使用sqlite3查询时MySQL语法错误

SQL Server 内存中 OLTP 哈希索引设置 BUCKET_COUNT 值

java - 无法从输入流中获取音频输入流

java - 对输入流和从文件中读取感到困惑

mysql - 返回时间戳差异值

php - OR 如何用于 php my 中的两个不同列

sql - 如何对序列 block 进行编号

java - Spring Boot 中的分层 Bean 依赖

java - 自定义 Spring Oauth 错误

php - 计算 php 中的平均评分