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