繁体   English   中英

在循环中查询,该循环仅执行一次Java

[英]Query in a loop which is executed only once Java

我目前正在从事Java项目(在NetBeans上),并且遇到了问题。

实际上,我有一个包含多个元素的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();
}

为什么每行运行一个查询? 您可以使用批处理查询在单个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();
}

当然,原始方法必须相应地进行更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM