繁体   English   中英

用PreparedStatement执行多个插入-Java

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM