2014-02-09 49 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

所以我想你有一個問題在你的數據庫,所以你可以發佈你的數據庫語句? –

回答

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

謝謝您的回覆。我不知道批量查詢!我是初學者,對Map不熟悉,你能告訴我如何使用它嗎? – Blondie

+0

轉換您的原始方法以將poiId和parcoursId保存到散列圖中,然後使用地圖調用addPoi()一次。給出了getPoi()的代碼。 –