2015-04-17 54 views
1

我试图弄清楚如何使用PostgreSQL和JDBC获取最后插入的行的id。JDBC查询返回值

CREATE TABLE vet_care (
     id serial PRIMARY KEY, 
     deworming int, 
     castration int 
    ); 

我的查询是

String insertVetCare = "INSERT INTO vet_care(castration,deworming) VALUES("+castrated+","+dewormed+") RETURNING id"; 

我想要的id值(即串行)以备后用。我试图执行查询,像这样:

int id = statement.executeUpdate(insertVetCare); 

但这说编译后,说:“没有预期当计算结果返回。”它不会将其他值插入到表中。

我该如何得到这个工作?

+0

请不要这样做字符串连接。这是一个坏习惯,即使'castrated'和'dewormed'是布尔值或整数,因此在这种情况下是安全的。 SQL注入ahoy。 –

回答

3

如果“ID”的意思是“生成的身份密钥”,那么你错了。

executeUpdate()方法根据javadocs返回受影响的行数。

您希望它返回自动生成的密钥,如this

更多建议:使用PreparedStatement并绑定值。以这种方式构建SQL查询需要SQL注入攻击。

// Why make the gc work? This query never changes. 
private static final String INSERT_VET_CARE = "INSERT INTO vet_care(castration,deworming) VALUES(?, ?)"; 


PreparedStatement ps = connection.prepareStatement(INSERT_VET_CARE, Statement.RETURN_GENERATED_KEYS); 
ps.setInt(1, castration); 
ps.setInt(2, deworming);