为什么这个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

我从下面的代码中获取最后一个插入的ID,但当我更改它以进行更新时,它总是将0作为最后一个更新的ID返回给我。在java中,使用准备好的语句获取最后一个更新的ID有什么不同的方法吗

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标准不支持它。