数据库中插入对象educlass 但是id为空 数据库设置了自增长id 如何同时返回这个id给idea

 2023-04-06 10:52:52  阅读 0

可以使用JDBC API的PreparedStatement对象的getGeneratedKeys()方法来获取数据库自动生成的ID。具体步骤如下:

在SQL语句中不包含id字段,例如:

INSERT INTO educlass (name, teacher) VALUES (?, ?)

创建一个PreparedStatement对象,并在执行前调用PreparedStatement.getGeneratedKeys()方法,例如:

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
    // 获取数据库连接
    conn = DriverManager.getConnection(url, username, password);
    // 编写SQL语句并预编译
    String sql = "INSERT INTO educlass (name, teacher) VALUES (?, ?)";
    pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
    // 设置参数值
    pstmt.setString(1, eduClass.getName());
    pstmt.setString(2, eduClass.getTeacher());
    // 执行插入操作并获取自动生成的ID
    int affectedRows = pstmt.executeUpdate();
    if (affectedRows == 0) {
        throw new SQLException("Insert failed, no rows affected.");
    }
    rs = pstmt.getGeneratedKeys();
    if (rs.next()) {
        int id = rs.getInt(1);
        // 将生成的ID设置回eduClass对象
        eduClass.setId(id);
    } else {
        throw new SQLException("Insert failed, no ID obtained.");
    }
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    // 关闭所有资源
    try { if (rs != null) rs.close(); } catch (SQLException e) {}
    try { if (pstmt != null) pstmt.close(); } catch (SQLException e) {}
    try { if (conn != null) conn.close(); } catch (SQLException e) {}
}

在上述代码中,使用Statement.RETURN_GENERATED_KEYS参数来告诉PreparedStatement对象,在执行插入操作后要返回自动生成的ID。然后在执行完插入操作后,通过调用PreparedStatement.getGeneratedKeys()方法获取自动生成的ID所对应的ResultSet对象,并通过调用ResultSet.getInt()等方法来获取生成的ID值。最后将生成的ID设置回eduClass对象中即可。

需要注意的是,使用该方法获取自动生成的ID前提是数据库表中必须有自增

 

标签:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码