4

我有这个 SQL 语句:

con = cpds.getConnection();
            con.setAutoCommit(false);
            SQL = "INSERT INTO person(accountID,addressID,lastName,firstName,middleName,suffix,gender,birthDate, [language], ethinicity) "
                    + "VALUES(?,?,?,?,?,?,?,?,?,?)";
            PreparedStatement stmt = con.prepareStatement(SQL,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

我想要做的是获取此语句的生成密钥。现在我之前已经这样做了,但没有设置结果集类型滚动参数。似乎也没有任何论据可以这样做:

PreparedStatement stmt = con.prepareStatement(SQL,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY, Statement.RETURN_GENERATED_KEYS)

我想知道的是:如何将结果集类型设置为不区分类型滚动并获取生成的密钥?

4

2 回答 2

5

Statement#getGeneratedKeys()返回一个ResultSet可用于检索密钥

ResultSet rsKeys = statement.getGeneratedKeys();
if (rsKeys.next()) {
    person.setId(rsKeys.getLong(1));
}

如何将结果集类型设置为不区分类型滚动并获取生成的密钥?

这样做没有意义,因为您只能在执行insert之后检索。虽然您只想为结果集设置滚动类型,即在查询之后。因此,这两件事是互斥的,因此 API 显然不支持它。

于 2013-07-06T18:47:18.573 回答
0

statement.getGeneratedKeys();有助于

于 2013-07-06T18:44:20.927 回答