Get RETURNING value from Postgresql via Java
According to the javadoc, PreparedStatement inherits from Statement and the latter contains a getResultSet() method. In other words, try this:
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();
last_updated_person.next();
int last_updated_person_id = last_updated_person.getInt(1);
Leave a comment if you have further issues.
I do not have enough reputation to Comment and my Edit got rejected, so sorry for re-posting the already accepted answer from hd1.
executeUpdate expects no returns; use execute. Check if there is some results before trying to retrieve the value.
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);
}
Calling executeUpdate()
expects no result from statement. Call stmt.execute() and then stmt.getResultSet()