2015-05-07 5 views
0

Это мой код:Java MySQL обновление подготовлено заявление не работает

ResultSet rs = statement.executeQuery("select * from page"); 
PreparedStatement updatepage = mySqlCon.prepareStatement("update enwiki.page set enwiki.page.Text = ? where page_id = ?"); 
int count = 0; 
while (rs.next()) 
{ 
    int id = rs.getInt("id"); 
    String text = rs.getString("text"); 
    if(text == null) 
      text = ""; 
    updatepage.setString(1, text); 
    updatepage.setInt(2, id); 


    if(count++ > 10000) 
    { 
     updatepage.executeUpdate(); 
     updatepage.clearBatch();    
     count = 0; 
     } 
} 

updatepage.executeUpdate(); 

Проблема после строки: updatepage.executeUpdate() запускается, проверить базу данных с помощью инструментальных средств, и я не вижу каких-либо изменений в этой таблице ,

ответ

3

Ваш текущий код выполняет только обновление, когда значение count больше 10000, и оно выполняет одно обновление. Похоже, вам нужно/нужно использовать пакетную обработку, поэтому вам нужно добавлять инструкции в пакет на каждой итерации (что-то, чего вы не делаете) и выполнять все заявления в пакете внутри вашего if (что-то, чего вы не знаете тоже).

код будет выглядеть следующим образом:

while (rs.next()) { 
    int id = rs.getInt("id"); 
    String text = rs.getString("text"); 
    if(text == null) 
     text = ""; 
    updatepage.setString(1, text); 
    updatepage.setInt(2, id); 

    //add the current statement to the batch 
    updatepage.addBatch(); 
    if(count++ > 10000) { 
     //line below will only execute the current statement (useless) 
     //updatepage.executeUpdate(); 
     //line below will clear the batch statements (useless too) 
     //updatepage.clearBatch(); 
     updatepage.executeBatch(); 
     count = 0; 
    } 
} 
//updatepage.executeUpdate(); 
updatepage.executeBatch(); 
+0

Это не сработало. – Andi

+0

@ Andi - это ваше соединение, установленное в автоматическом режиме? Если нет, вам придется добавить 'Connection # commit' после выполнения всех ваших операций. –

+0

Да, я пробовал в обоих направлениях, автокоммутировать и нормально, никто из них не работал. – Andi

-1

Можете ли вы дать вставить весь код? Из кода, который вы предоставили updatepage.addBatch();/updatepage.executeBatch(); пропал, отсутствует. Также проверьте, является ли dbConnection.setAutoCommit (false) ;.

+0

Любые объяснения по нижнему горизонту? – user21

Смежные вопросы