2014-02-09 2 views
1

В настоящее время я работаю над проектом Java (на NetBeans), и я борюсь с проблемой.Запрос в цикле, который выполняется только один раз Java

В самом деле, у меня есть jTable, который содержит несколько элементов, которые элемент во втором столбце с jCheckBox и я хотел бы, чтобы сделать запрос, чтобы добавить выбранный элемент (выбранный jCheckBox конечно) в таблице.

Я могу получить данные, которые хочу добавить, но мой запрос работает только один раз. Я уже проверил свой цикл, но я не знаю, откуда эта проблема.

я позволю вам увидеть код:

try { 
    // Getting id of the selected value in the jComboBox 
    String idParcours = oParcoursDAO.findIdParcours(jComboBoxParcours.getSelectedItem().toString()); 
    int id = Integer.parseInt(idParcours); 

    // for each value in the jTable 
    for(int i=0; i <jTable2.getRowCount(); i++){ 

     boolean isChecked = (Boolean)jTable2.getValueAt(i, 1); 
     String nomPoi = (String)jTable2.getValueAt(i, 0);  
      // if the value is selected 
      if(isChecked){ 
       String IDPoi = oParcoursDAO.findIdPoi(nomPoi); 
       int idpoi = Integer.parseInt(IDPoi); 

       System.out.println("idpoi "+idpoi); // It works I saw as idpoi as I have choose 
       System.out.println("id "+id) // It works too 

       oParcoursDAO.addPoi(idpoi,id); // it works only once    
      } 
     }    
    }catch (SQLException ex) { 
    Logger.getLogger(ModificationParcoursJInternalFrame.class.getName()).log(Level.SEVERE, null, ex); 
} 

Заранее спасибо за вашу помощь.

Это мое заявление

public void addPoi(int idPoi,int idParcours) throws SQLException{ 

    String query = "INSERT INTO TB_POI_PARCOURS (id_poi,id_parcours) VALUES (?,?) "; 
    PreparedStatement preparedStatement = conn.prepareStatement(query); 
    preparedStatement.setInt(1,idPoi); 
    preparedStatement.setInt(2,idParcours); 
    preparedStatement.executeUpdate(); 
    preparedStatement.close(); 
} 
+0

Я видел, что у вас нет ошибки в коде, поэтому попробуйте отладить код и добавить инструкцию печати после каждой строки, чтобы проверить, где проблема. –

+0

Я уже пробовал это, и когда я печатаю запрос, это было напечатано столько раз, сколько ожидалось, поэтому я действительно не понимаю, почему в моей базе данных есть только одно добавление. – Blondie

+0

, поэтому я предполагаю, что у вас есть проблема в вашей базе данных, так что можете ли вы опубликовать свои заявления на db? –

ответ

2

Почему вы используете один запрос в строке? Вы можете выполнить все из них в одном SQL, используя пакетные запросы. Это потребует от вас, чтобы изменить код, но это сделает его более эффективным:

public void addPoi(Map<integer,Integer> poiMap) throws SQLException{ 

    String query = "INSERT INTO TB_POI_PARCOURS (id_poi,id_parcours) VALUES (?,?) "; 
    PreparedStatement preparedStatement = conn.prepareStatement(query); 
    for(Integer idPoi:poiMap.keySet()) { 
     preparedStatement.setInt(1,idPoi); 
     preparedStatement.setInt(2,poiMap.get(idPoi)); 
     preparedStatement.addBatch(); 
    } 
    preparedStatement.executeBatch(); 
    preparedStatement.close(); 
} 

Конечно оригинальный метод должен быть изменен соответствующим образом.

+0

Спасибо за ваш ответ. Я не знал пакетных запросов! Я новичок, и я не знаком с Картой, не могли бы вы рассказать мне, как ее использовать? – Blondie

+0

Конвертировать исходный метод для сохранения poiId и parcoursId в Hashmap, а затем вызвать addPoi() один раз с помощью карты. Дается код для getPoi(). –

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