Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 语句。getGeneratedKeys()方法_Java - Fatal编程技术网

Java 语句。getGeneratedKeys()方法

Java 语句。getGeneratedKeys()方法,java,Java,我目前正在观看一个视频教程,我对以下代码感到困惑: public static boolean insert(Member mbr) throws Exception { String SQL = "INSERT INTO test (first_name, last_name) " + "VALUES (?, ?)"; ResultSet keys = null; try ( Connection con = D

我目前正在观看一个视频教程,我对以下代码感到困惑:

public static boolean insert(Member mbr) throws Exception {

    String SQL = "INSERT INTO test (first_name, last_name) " +
                "VALUES (?, ?)";
    ResultSet keys = null;
    try (
            Connection con = DBUtil.getConnection(DBType.MYSQL);
            PreparedStatement stmt = con.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
        ) {

        stmt.setString(1, mbr.getFname());
        stmt.setString(2,  mbr.getLname());
        int affected = stmt.executeUpdate();

        if (affected == 1) {
            keys = stmt.getGeneratedKeys();
            keys.next();
            int newKey = keys.getInt(1);
            mbr.setMemberid(newKey);
        } else {
            System.err.println("No rows affected");
            return false;
        } 
    } finally {
        if (keys != null) keys.close();
    }
    return true;
}
关于
stmt.getGeneratedKeys()
方法,由于它在执行语句对象时返回自动生成的键,为什么需要调用
getInt()
方法


另外,默认情况下,光标指向插入的行之前,那么为什么要在
get.GeneratedKeys()
之前调用
next()
方法呢?是否应该首先调用
next()
方法,以便光标在获取
GeneratedKey
之前转到第一个结果行。有些数据库每行可以返回多个生成的键,它们不必是整数,也可以是GUID字符串或其他内容。因此,您需要在上面的代码中调用
getInt(1)
。其次,您不正确,JDBC返回的结果集位于第一行之前,因此需要调用next()。如果结果集没有行,调用next()将返回
false
,表明没有结果。

两件事。有些数据库每行可以返回多个生成的键,它们不必是整数,也可以是GUID字符串或其他内容。因此,您需要在上面的代码中调用
getInt(1)
。其次,您不正确,JDBC返回的结果集位于第一行之前,因此需要调用next()。如果结果集没有行,调用next()将返回
false
,表明没有结果。

两件事。有些数据库每行可以返回多个生成的键,它们不必是整数,也可以是GUID字符串或其他内容。因此,您需要在上面的代码中调用
getInt(1)
。其次,您不正确,JDBC返回的结果集位于第一行之前,因此需要调用next()。如果结果集没有行,调用next()将返回
false
,表明没有结果。

两件事。有些数据库每行可以返回多个生成的键,它们不必是整数,也可以是GUID字符串或其他内容。因此,您需要在上面的代码中调用
getInt(1)
。其次,您不正确,JDBC返回的结果集位于第一行之前,因此需要调用next()。如果结果集没有行,调用next()将返回
false
,表明没有结果。

getGeneratedKeys()返回一个带有自动生成键的结果集对象,除了getInt()之外,没有其他方法从结果集获取它吗?我的意思是,如果仍然需要调用getInt(),那么必须返回带有generatedKey的ResultSet对象有什么用?通常只需返回一个典型的ResultSet,然后调用.next()和getInt(),对吗?如果ResultSet的位置在第一行之前,那么为什么getGeneratedKeys()调用在.next()之前?在调用GetGeneratedKeys之前,是否应该首先调用.next()将位置移动到第一行?实际上,从技术上讲,查询可以同时返回ResultSet(来自查询)和生成的键。这就是为什么有两种不同的方法。查询也可以返回ResultSet,因此有一个getMoreResults()方法。getGeneratedKeys()返回一个带有自动生成键的ResultSet对象,除了getInt()之外,没有其他方法从ResultSet获取它吗?我的意思是,如果仍然需要调用getInt(),那么必须返回带有generatedKey的ResultSet对象有什么用?通常只需返回一个典型的ResultSet,然后调用.next()和getInt(),对吗?如果ResultSet的位置在第一行之前,那么为什么getGeneratedKeys()调用在.next()之前?在调用GetGeneratedKeys之前,是否应该首先调用.next()将位置移动到第一行?实际上,从技术上讲,查询可以同时返回ResultSet(来自查询)和生成的键。这就是为什么有两种不同的方法。查询也可以返回ResultSet,因此有一个getMoreResults()方法。getGeneratedKeys()返回一个带有自动生成键的ResultSet对象,除了getInt()之外,没有其他方法从ResultSet获取它吗?我的意思是,如果仍然需要调用getInt(),那么必须返回带有generatedKey的ResultSet对象有什么用?通常只需返回一个典型的ResultSet,然后调用.next()和getInt(),对吗?如果ResultSet的位置在第一行之前,那么为什么getGeneratedKeys()调用在.next()之前?在调用GetGeneratedKeys之前,是否应该首先调用.next()将位置移动到第一行?实际上,从技术上讲,查询可以同时返回ResultSet(来自查询)和生成的键。这就是为什么有两种不同的方法。查询也可以返回ResultSet,因此有一个getMoreResults()方法。getGeneratedKeys()返回一个带有自动生成键的ResultSet对象,除了getInt()之外,没有其他方法从ResultSet获取它吗?我的意思是,如果仍然需要调用getInt(),那么必须返回带有generatedKey的ResultSet对象有什么用?通常只需返回一个典型的ResultSet,然后调用.next()和getInt(),对吗?如果ResultSet的位置在第一行之前,那么为什么getGeneratedKeys()调用在.next()之前?在调用GetGeneratedKeys之前,是否应该首先调用.next()将位置移动到第一行?实际上,从技术上讲,查询可以同时返回ResultSet(来自查询)和生成的键。这就是为什么有两种不同的方法。查询也可以返回结果集,因此有一个getMoreResults()方法。我尝试将stmt.getGeneratedKeys()更改为stmt.getResultSet(),输入将保存到数据库中,但这会给我一个错误