为什么这个java代码没有';无法获取上次更新的ID?
我从下面的代码中获取最后一个插入的ID,但当我更改它以进行更新时,它总是将0作为最后一个更新的ID返回给我。在java中,使用准备好的语句获取最后一个更新的ID有什么不同的方法吗为什么这个java代码没有';无法获取上次更新的ID?,java,oracle,jdbc,Java,Oracle,Jdbc,我从下面的代码中获取最后一个插入的ID,但当我更改它以进行更新时,它总是将0作为最后一个更新的ID返回给我。在java中,使用准备好的语句获取最后一个更新的ID有什么不同的方法吗 public static String updateRegistrationInfo(Integer COMPANY_ID, String FIRST_NAME, String LAST_NAME, String MOBILE_NO, St
public static String updateRegistrationInfo(Integer COMPANY_ID, String FIRST_NAME, String LAST_NAME, String MOBILE_NO,
String WORK_EMAIL, String PASSWORD) throws Exception {
Connection dbConnection = null;
PreparedStatement preparedStatement = null;
Integer last_inserted_id = 0;
String insertTableSQL =
"UPDATE USER_DETAILS SET COMPANY_ID=?,FIRST_NAME=?, LAST_NAME=?, MOBILE_NO=?, WORK_EMAIL=?, PASSWORD=? WHERE WORK_EMAIL=? AND MOBILE_NO=?";
try {
dbConnection = getConnection();
//--USER_ID IS SET TO AUTO INCREMENT PRIMARY KEY
String returnCols[] = { "USER_ID" };
//--INSERTING MEETING DETAILS
preparedStatement = dbConnection.prepareStatement(insertTableSQL, returnCols);
preparedStatement.setInt(1, COMPANY_ID);
preparedStatement.setString(2, FIRST_NAME);
preparedStatement.setString(3, LAST_NAME);
preparedStatement.setString(4, MOBILE_NO);
preparedStatement.setString(5, WORK_EMAIL);
preparedStatement.setString(6, PASSWORD);
preparedStatement.setString(7, WORK_EMAIL);
preparedStatement.setString(8, MOBILE_NO);
// execute insert SQL stetement
preparedStatement.executeUpdate();
ResultSet rs = preparedStatement.getGeneratedKeys();
if (rs.next()) {
last_inserted_id = rs.getInt(1);
}
return last_inserted_id.toString();
} catch (SQLException e) {
return e.getMessage() + " ERROR CODE: " + e.getErrorCode();
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
if (dbConnection != null) {
dbConnection.close();
dbConnection = null;
}
}
}
与生成新行的
INSERT
不同,UPDATE
对现有行进行操作,因此它不会生成新行键。当你打这个电话的时候
ResultSet rs = preparedStatement.getGeneratedKeys();
if (rs.next()) {
last_inserted_id = rs.getInt(1);
}
结果返回为空,因此last\u inserted\u id
保持为零
这背后的逻辑很简单:在
INSERT
中,您不知道密钥将是什么,因此JDBC允许您检索它。在UPDATE
中,您知道要设置的键是什么-它是公司ID
,因此您不需要一种方法来检索它。PS:Oracle支持returning子句,但从JDBC使用它并不简单。JDBC标准不支持它。