我有一个作者表: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吗?
答案 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?