JDBCを使用して3つのテーブルに挿入しようとしています。私のコードのクエリは、MySQL WorkbenchでもRANSが、私はPreparedStatement
を使用して、それを実行すると、私はあなたのSQL構文でエラーが発生しているJDBCを使用してテーブルを挿入する
を言ってエラーに遭遇します。
を使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください私のクエリは
BEGIN;
INSERT INTO user_authentication (enabled, password, username) values (1,'password','username');
SET @userId = LAST_INSERT_ID();
INSERT INTO account(is_active, balance, user_id) values(1,0.0,@userId);
INSERT INTO user_information (email, firstname, lastname, user_id) values ('[email protected]','Oleg','Oleg',@userId);
INSERT INTO user_authorization (role, user_id) values ('ROLE_USER', @userId);
COMMIT;
のように見えるそのエラーがそのBEGIN;
の文が原因であると思われます。 JDBCとPreparedStatement
を使用して複数の挿入クエリを実行するにはどうすればよいですか?
全体の方法は、あなたが少しここで用語を混同している
@Override
public void save(User user) {
Connection conn = null;
Account account = user.getAccount();
UserInformation information = user.getUserInformation();
Set<UserAuthorization> roles = user.getRoles();
String insertUserQuery = "INSERT INTO user_authentication (enabled, password, username) values (?,?,?);";
String insertAccountQuery = "INSERT INTO account(is_active, balance, user_id) values(?,?,@userId);";
String insertInformationQuery = "INSERT INTO user_information (email, firstname, lastname, user_id) values (?,?,?,@userId);";
String insertRolesQuery = "INSERT INTO user_authorization (role, user_id) values (?, @userId);";
String query = "BEGIN;" + insertUserQuery
+ " SET @userId = LAST_INSERT_ID(); " + insertAccountQuery
+ insertInformationQuery + insertRolesQuery + "COMMIT;";
try {
conn = dataSource.getConnection();
PreparedStatement statement = conn.prepareStatement(query);
statement.setBoolean(1, true);
statement.setString(2, user.getPassword());
statement.setString(3, user.getUsername());
statement.setBoolean(4, true);
statement.setDouble(5, account.getBalance());
statement.setString(6, information.getEmail());
statement.setString(7, information.getFirstName());
statement.setString(8, information.getLastName());
for (UserAuthorization role : roles) {
statement.setString(9, role.getRole().toString());
}
statement.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
あなたが直接、BEGIN、COMMIT& –
@YuriのないINSERT INTOは......、はい行うことができますが、私はそのローカル変数を必要とする「@userId」に外部キーを挿入します。そして、それは不自然に3つのJavaメソッド呼び出しからデータベースをトリガするようです。 –
あなたは、私が理解し、バッチ処理があり、Nishant123 @このリンク https://examples.javacodegeeks.com/core-java/sql/jdbc-batch-insert-example/ – Nishant123