簡體   English   中英

為什么這個java代碼沒有獲得最后更新的ID?

[英]Why this java code doesn't get last updated ID?

我從下面的代碼中獲取最后一個插入的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_inserted_id保持為零。

這背后的邏輯很簡單:在INSERT你不知道密鑰是什么,所以JDBC允許你檢索它。 UPDATE您知道您正在設置哪個鍵 - 它是COMPANY_ID , - 所以您不需要一種方法來檢索它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM