5

mySQL に最後に挿入されたデータの自動インクリメント値を取得しようとしています。これが私のコードです:

public int getAutoIncrementProductID() {
    ResultSet rs = null;
    DBController db = new DBController();
    db.getConnection();
    int autoIncKeyFromFunc = -1;
    rs = db.readRequest("SELECT LAST_INSERT_ID()");
    try {
        if (rs.next()) {
            autoIncKeyFromFunc = rs.getInt(1);
            System.out.println("AUTO ID IS " + autoIncKeyFromFunc);
            rs.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    db.terminate();
    return autoIncKeyFromFunc;
}

ただし、データベースの自動インクリメント列は増加し続けていますが、これらのコードは 0 値を返し続けます。最後に挿入されたデータの自動インクリメント値を取得できません。誰でも助けることができますか?

4

5 に答える 5

9

LAST_INSERT_ID()何かを挿入した後に使用する必要があります。

LAST_INSERT_ID() の場合、最後に生成された ID が接続ごとにサーバーに保持されます。別のクライアントによって変更されることはありません。別の AUTO_INCREMENT カラムを非マジック値 (つまり、NULL でも 0 でもない値) で更新しても、変更されません。

ソース

あなたも試すことができます

SELECT max(id) FROM tableName

ただし、削除された行は想定されません。

于 2013-07-13T05:05:37.947 に答える
3

これはどう?

SELECT your_id FROM your_table ORDER BY your_id DESC LIMIT 1
于 2013-07-13T14:36:36.393 に答える
1

あなたはJdbcを使用しているので、生成されたキーを取得する別の方法があると思いますAPIを使用することですconnection. createStatement (Statement.RETURN_GENERATED_KEYS);このスレッドPreparedStatement with Statement.RETURN_GENERATED_KEYSを見てください

于 2013-07-13T14:32:44.093 に答える
0

データベースへの複数の接続がある場合、特に mysql_insert_id() を使用する場合は注意してください。挿入したクエリの値を取得しないためです。テーブルの最新のIDを取得します。別のクエリが挿入した行である可能性があります。1 つの接続でデータベースにアクセスする場合にのみ、この関数を使用してください。

挿入したクエリの ID を取得する場合は、そのクエリで挿入した一意の値を持つ行を選択してみてください。例 : ユーザーのユーザー ID を電子メール アドレスで検索する。

SELECT id from users where emailaddress='me@johndoe.com' LIMIT 1

詳細はこちら: https://www.php.net/manual/en/function.mysql-insert-id.php

于 2020-03-23T11:31:36.563 に答える
0

私はこれを使用します:

SELECT auto_increment + 1 AS NEXT_ID
FROM   `information_schema`.`tables`
WHERE  table_name = "table_name"
       AND table_schema = "database_name"
于 2019-03-09T10:05:30.560 に答える