从Java,我在Postgresql中调用一个带有插入的预准备语句,该插件具有我的标识列的RETURNING子句。在PG管理员它回来了,但不知道如何从我准备好的声明中得到它:
String insertStatement = "INSERT INTO person(\n" +
" name, address, phone, customer_type, \n" +
" start_dtm)\n" +
" VALUES (?, ?, ?, ?, \n" +
" ?)\n" +
" RETURNING person_id;";
PreparedStatement stmt = connection.prepareStatement(insertStatement);
stmt.setObject(1, perToSave.getName(null));
stmt.setObject(2, editToSave.getAddress());
stmt.setObject(3, editToSave.getPhone());
stmt.setObject(4, editToSave.getCustType());
long epochTime = java.lang.System.currentTimeMillis();
stmt.setObject(5, new java.sql.Date(epochTime));
stmt.executeUpdate();
根据javadoc,PreparedStatement继承自Statement,后者包含getResultSet()方法。换句话说,试试这个:
String insertStatement = "INSERT INTO person(\n" +
" name, address, phone, customer_type, \n" +
" start_dtm)\n" +
" VALUES (?, ?, ?, ?, \n" +
" ?)\n" +
" RETURNING person_id;";
PreparedStatement stmt = connection.prepareStatement(insertStatement);
stmt.setObject(1, perToSave.getName(null));
stmt.setObject(2, editToSave.getAddress());
stmt.setObject(3, editToSave.getPhone());
stmt.setObject(4, editToSave.getCustType());
long epochTime = java.lang.System.currentTimeMillis();
stmt.setObject(5, new java.sql.Date(epochTime));
stmt.executeUpdate();
ResultSet last_updated_person = stmt.getResultSet();
last_updated_person.next();
int last_updated_person_id = last_updated_person.getInt(1);
如果您有其他问题,请发表评论。
我没有足够的声誉评论和我的编辑被拒绝,所以很抱歉重新张贴hd1已经接受的答案。
executeUpdate期望没有返回;使用执行。在尝试检索值之前检查是否有一些结果。
String insertStatement = "INSERT INTO person(\n" +
" name, address, phone, customer_type, \n" +
" start_dtm)\n" +
" VALUES (?, ?, ?, ?, \n" +
" ?)\n" +
" RETURNING person_id;";
PreparedStatement stmt = connection.prepareStatement(insertStatement);
stmt.setObject(1, perToSave.getName(null));
stmt.setObject(2, editToSave.getAddress());
stmt.setObject(3, editToSave.getPhone());
stmt.setObject(4, editToSave.getCustType());
long epochTime = java.lang.System.currentTimeMillis();
stmt.setObject(5, new java.sql.Date(epochTime));
stmt.execute();
ResultSet last_updated_person = stmt.getResultSet();
if(last_updated_person.next()) {
int last_updated_person_id = last_updated_person.getInt(1);
}
调用executeUpdate()
预计声明没有结果。调用stmt.execute()然后调用stmt.getResultSet()