簡體   English   中英

Statement.getGeneratedKeys()方法

[英]Statement.getGeneratedKeys() method

我目前正在觀看視頻教程,我對此代碼感到困惑:

public static boolean insert(Member mbr) throws Exception {

    String SQL = "INSERT INTO test (first_name, last_name) " +
                "VALUES (?, ?)";
    ResultSet keys = null;
    try (
            Connection con = DBUtil.getConnection(DBType.MYSQL);
            PreparedStatement stmt = con.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
        ) {

        stmt.setString(1, mbr.getFname());
        stmt.setString(2,  mbr.getLname());
        int affected = stmt.executeUpdate();

        if (affected == 1) {
            keys = stmt.getGeneratedKeys();
            keys.next();
            int newKey = keys.getInt(1);
            mbr.setMemberid(newKey);
        } else {
            System.err.println("No rows affected");
            return false;
        } 
    } finally {
        if (keys != null) keys.close();
    }
    return true;
}

關於stmt.getGeneratedKeys()方法,由於它在執行Statement對象時返回自動生成的鍵,為什么需要調用getInt()方法?

此外,默認情況下,游標指向插入的行之前,為什么在get.GeneratedKeys()之前調用next()方法? 不應該首先調用next()方法,以便在獲取GeneratedKey之前光標將轉到第一個結果行?

兩件事情。 某些數據庫可以每行返回多個生成的密鑰,它們不必是整數,它們可以是GUID字符串或其他內容。 因此,您需要在上面的代碼中調用getInt(1) 其次,你是不正確的,JDBC返回的ResultSet位於第一行之前 ,因此需要調用next()。 如果ResultSet沒有行,則調用next()將返回false表示沒有結果。

暫無
暫無

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

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