-1

次のように、1 つの列に新しい行を挿入し、別の列で同じ行を参照する 2 つの MySQL ステートメントを作成しようとしています。

あなたが知る必要がある場合に備えて、私はJavaを使用しています/com.mysql.jdbc.Driver

insertNewMessage = connection
        .prepareStatement(new StringBuilder(128)
                .append("INSERT INTO messages (Message,SHA256) VALUES (?,?);")
                .append("INSERT INTO messagelog (MESSAGE_ID,SERVER_ID,CLIENT_ID) VALUES ((SELECT LAST_INSERT_ID()),?,?)")
                .toString());

したがって、より明確にするために、私のSQLステートメントは次のとおりです。

INSERT INTO messages (Message,SHA256) VALUES (?,?);
INSERT INTO messagelog (MESSAGE_ID,SERVER_ID,CLIENT_ID) VALUES ((SELECT LAST_INSERT_ID()),?,?)

メッセージ テーブルで作成された新しい ROWID 値を取得し、それをメッセージ ログ テーブルに挿入したいと考えています。

LAST_INSERT_ID()、mysql_insert_id()の両方が機能していないことがわかりました。次の例外がスローされます。

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO messagelog (MESSAGE_ID,SERVER_ID,CLIENT_ID) VALUES ((SELECT LAST_INS' at line 1

MYSQL のドキュメントでは、Last_Insert_ID が機能するはずですが、注意点があると思います。それらの警告が何であるかはわかりません。(はい、ROWID に AI が設定されています)

4

2 に答える 2

0

これを試して:

connection.createStatement().executeUpdate("INSERT INTO blablabla");
ResultSet rs = connection.createStatement().executeQuery("select last_insert_id() as mID");
if(rs.next()){
  connection.createStatement().executeUpdate(
    "INSERT INTO blablabla VALUES(" + rs.getString("mID") + ",blablabla");
}
于 2013-06-26T21:18:11.630 に答える