[英]Java PreparedStatement multiple batch inserts with foreign keys
[英]execute multiple inserts with PreparedStatement - Java
我正在使用Java + Connector / J + MySQL进行项目。 我需要使用一个PreparedStatement执行以下查询。 可能吗?
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服务器版本相对应的手册,以获取在'INSERT INTO DISTRIBUTES(PEERID,FILEID)VALUES附近使用正确的语法(16,LAST_INSERT_ID())'在第3行“
您只能使用单个prepareStatement执行一条语句。 您必须将sql分成两个单独的insert into
...序列。
也
INSERT INTO DISTRIBUTES (PEERID, FILEID) VALUES (" + peerID + ",LAST_INSERT_ID());";
看起来不像使用peerID
它具有硬编码的peerID
而不是占位符?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.