在jdbc中循环多次插入

gau*_*rav 0 java sql jdbc

while (tokens.hasMoreTokens()) 
{
    keyword = tokens.nextToken();
    System.out.println("File= "+fileid+" Keyword=" + keyword);
    stmt.executeUpdate(
        "INSERT into TEXTVALUEINVERTEDINDEX " + "(FILEID, KEYWORD) values ('"
        + fileid + "', '" + keyword + "')"
    );      
}
Run Code Online (Sandbox Code Playgroud)

这是我正在更新行的循环.我面临的问题是,当我运行时,只有1个值得到更新,当我对该stmt.executeUpdate()行进行注释时,它会显示数据库中的所有可能条目.

Mat*_*ows 5

你需要使用preparedStatements ...

PreparedStatement pStmt = connection.prepareStatement("INSERT into TEXTVALUEINVERTEDINDEX (FILEID, KEYWORD) values(?,?)");
while (tokens.hasMoreTokens()) 
    {
        keyword = tokens.nextToken();
        System.out.println("File= "+fileid+"    Keyword="+keyword);

        pStmt.setString(1, fileid); //This might be pStmt.SetInt(0, fileid) depending on teh type of fileid)
        pStmt.setString(2, keyword);

        pStmt.executeUpdate();
    }
Run Code Online (Sandbox Code Playgroud)

然后使用这个你可以扩展到我们批量更新...

PreparedStatement pStmt = connection.prepareStatement("INSERT into TEXTVALUEINVERTEDINDEX (FILEID, KEYWORD) values(?,?)");
    while (tokens.hasMoreTokens()) 
        {
            keyword = tokens.nextToken();
            System.out.println("File= "+fileid+"    Keyword="+keyword);

            pStmt.setString(1, fileid); //This might be pStmt.SetInt(0, fileid) depending on teh type of fileid)
            pStmt.setString(2, keyword);

            pStmt.addBatch();
        }
pStmt.executeBatch();
Run Code Online (Sandbox Code Playgroud)

不确定为什么你的代码不起作用 - 但从长远来看这可能会有所帮助......