0
我正在使用Java + Connector/J + MySQL處理項目。 我需要使用一個PreparedStatement執行以下查詢。可能嗎?使用PreparedStatement執行多個插入 - Java
INSERT INTO FILES (FILENAME, FILESIZE, HASH) VALUES (a,b,c)
ON DUPLICATE KEY UPDATE FILEID=LAST_INSERT_ID(FILEID);
INSERT INTO DISTRIBUTES (PEERID, FILEID) VALUES (1,LAST_INSERT_ID());
當我嘗試執行此操作時,出現錯誤。我知道如何批量執行相同的INSERT語句,但我無法在一個語句中使用多個插入操作。
在Java執行上面的代碼,是這樣的:
query = "INSERT INTO FILES (FILENAME, FILESIZE, HASHROOT, HASHLIST) VALUES (?,?,?,?)\n" +
"ON DUPLICATE KEY UPDATE FILEID=LAST_INSERT_ID(FILEID);\n" +
"INSERT INTO DISTRIBUTES (PEERID, FILEID) VALUES (" + peerID + ",LAST_INSERT_ID());";
pstmt = null;
try
{
pstmt = conn.prepareStatement(query);
stmt.setString(1, files[i].getFileName());
pstmt.setLong(2, files[i].getFileSize());
pstmt.setString(3, /* Get some data here */);
pstmt.setBytes(4, /* Get some data here */);
pstmt.addBatch();
pstmt.executeBatch();
}
catch (Exception ex)
{
// Error handling
}
finally
{
// Close resources
}
編輯:我在catch塊得到的錯誤,是說「你在你的SQL語法錯誤;檢查手冊,該手冊對應於您的MySQL服務器版本,以便在第3行「INSERT INTO DISTRIBUTES(PEERID,FILEID)VALUES(16,LAST_INSERT_ID())」附近使用正確的語法。「
真的不能做太多沒有你的代碼... – christophmccann 2012-03-03 16:37:23
什麼**是* *你得到的錯誤?並且不要吞下catch塊中的異常。至少打印出來! – 2012-03-03 17:08:55
您是否試圖單獨執行這兩個語句而沒有「;」和「\ n」?我不熟悉Connector/J,但這些分號分隔的行看起來不太好。 – 2012-03-03 17:23:38