我想執行2個查詢。Mysql 2插入查詢
第一個應該插入數據(特別是「產品」)或更新,以防數據庫已經有這樣的標題行。
第二個要插入新類別產品,插入\從第一次查詢更新,並忽略任何插入,如果表中已經有這樣的產品,這樣的分類
這裏是我的代碼:
conn = DatabaseConnection.getConnection();
stmt = conn.createStatement();
conn.setAutoCommit(false);
String updateSQL = "INSERT INTO product (title, price, `status`) " +
"VALUES(?, ?, ?)" +
"ON DUPLICATE KEY UPDATE price = ?, `status` = ?;"
PreparedStatement preparedStatement = conn.prepareStatement(updateSQL);
preparedStatement.setString(1, product.getTitle());
preparedStatement.setBigDecimal(2, product.getPrice());
preparedStatement.setInt(3, product.getStatus().ordinal());
preparedStatement.executeUpdate();
updateSQL = "INSERT IGNORE INTO product_categories (product_id, category_id) " +
"VALUES (last_insert_id(), ?);";
preparedStatement = conn.prepareStatement(updateSQL);
preparedStatement.setLong(1, categoryId);
preparedStatement.executeUpdate();
conn.commit();
所以,問題是我使用last_insert_id()
這意味着如果第一個查詢只更新了數據,我將在第二個查詢中使用不正確的行。
所以,我想知道如何同步這兩個查詢。
葉氏,我只是忘了複製。 我不明白什麼是「取」 「[看這個問題的細節]」只是一個字符串,它不是一個鏈接 – quento
(對不起 - 忘了粘貼鏈接)從你的第一個查詢中取出last_insert_id,如果它存在,只執行第二個查詢。 [請參閱此問題的詳細信息](http://stackoverflow.com/questions/5513180/java-preparedstatement-retrieving-last-inserted-id) – Kenney
您能提供一個示例嗎? – quento