带有SQL的JAVA:insert命令的返回值?

时间:2013-01-09 11:30:02

标签: java sql jdbc

我有一个作者表:authorID,authorName。 authorID是一个自动增量的pk。

我想在java中编写一个从用户获取名称并将其添加到表中的方法。但是我需要返回作者的id。有没有办法用1 sql语句做到这一点?

例如,如果我的代码有命令:

stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");

其中string.get(1)是作者姓名。

现在如果我写:

ResultSet rs =stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");

它表示错误,因为rs是结果集,但返回的值是int。这是我插入的行的pk吗?

5 个答案:

答案 0 :(得分:7)

尝试

stmt.executeUpdate("INSERT INTO authors VALUES (, '"+ string.get(1) +"')", Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
rs.next();
long pk = rs.getLong(1);

答案 1 :(得分:5)

在创建PreparedStatement conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);时传递Statement.RETURN_GENERATED_KEYS

PreparedStatement#getGeneratedKeys()在惰性后返回自动生成的密钥。

答案 2 :(得分:3)

为了获得最后插入的ID,请查看以下代码:

PreparedStatement stmnt = Conn.preparedStatement("INSERT INTO authors(col1) VALUES (?)", Statement. RETURN_GENERATED_KEYS );
stmnt.setString(col1val);
stmnt.executeUpdate();
ResultSet rs=stmnt.getGeneratedKeys();
if(rs.next()){
   System.out.println(rs.getInt(1));
}

答案 3 :(得分:0)

尝试:

INSERT INTO authors VALUES (...) returning authorID

执行时,请使用executeQuery执行此操作。您应该返回一个ResultSet,其中包含一行和一列 - 它将是ID。

答案 4 :(得分:0)

我不知道JDBC是否支持它(暂时没有使用它),但我想你可以试试:

INSERT INTO TABLE_NAME (FIELD1, FIELD2) VALUES ('foo', 'bar') RETURNING FIELD3

通过executeQuery()或者,如果你的jdbc驱动程序不支持RETURNING写一个简单的存储函数。

您使用的是哪个RDMBS?