Несколько вставок в цикле в JDBC - PullRequest
0 голосов
/ 06 октября 2010
while (tokens.hasMoreTokens()) 
{
    keyword = tokens.nextToken();
    System.out.println("File= "+fileid+" Keyword=" + keyword);
    stmt.executeUpdate(
        "INSERT into TEXTVALUEINVERTEDINDEX " + "(FILEID, KEYWORD) values ('"
        + fileid + "', '" + keyword + "')"
    );      
}

Это цикл, в котором я обновляю строки. Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю это, обновляется только 1 значение, а когда я комментирую строку stmt.executeUpdate(), отображаются все возможные записи в базе данных.

Ответы [ 4 ]

5 голосов
/ 06 октября 2010

Вам нужно использовать подготовленные состояния ...

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();
    }

, затем вы можете использовать это пакетное обновление для нас ...

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();

Не знаете, почему ваш код не соответствуетхотя работает - но это, вероятно, поможет в долгосрочной перспективе ...

1 голос
/ 06 октября 2010

Если вы хотите, чтобы все обновления были применены одновременно, вы можете использовать пакетное выполнение, здесь является примером

1 голос
/ 06 октября 2010

Ваш код должен работать.Убедитесь, что предложение не выдает никаких исключений при запуске, окружив его блоком try/catch:

try {
    stmt.executeUpdate("INSERT into TEXTVALUEINVERTEDINDEX " + 
         "(FILEID, KEYWORD) "+"values ('"+fileid+"', '"+keyword+"')"); 
} catch (SQLException e) {
    e.printStackTrace();
}

Вы также должны рассмотреть возможность использования PreparedStament, поскольку его использование очень подходит для описанного вами сценария.:

Примерно так:

String sql = "insert into textvalueinvertedindex (fileid, keyword) values (?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
while (tokes.hasMoreTokens()) {
    keywords = tokens.nextToken();
    pstmt.setString(1, fileid);
    pstmt.setString(2, keyword);
    pstmt.executeUpdate();
}
pstmt.close();
0 голосов
/ 06 октября 2010

Ваш диапазон дат и выбор фильтра не содержали результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...