是否可以将ResultSet从查询存储到数组中,并将该数组用作SQL查询的搜索参数

时间:2015-08-04 13:51:33

标签: java sql arrays derby

我有两个表WorkSkillsPlanning(WSP)和TrainingAchieved(TA)。 WSP持有计划培训列表和有针对性的人数,例如ISOO:90001 10人,而TA持有实际训练人数以及实际完成的课程。由于WSP和TA是动态的,因为它们所持有的数据不是静态的,因此训练计划无法改变,因此可以在这些表上运行交叉查询以查找相似之处,即WSP中的实际已完成的课程和记录在TA中。将交叉查询的结果存储在数组中,例如MyArrayList {ISO,COMMUNICATION}这些值都存在于两个表中,并使用MyArrayList值在TA上运行计数查询,以确定完成该课程的人数,即ISO和COMMUNICATION,并使用结果从WSP中减去(ISO,通讯)。

这是一个例子,第一部分

"Select QUALIFICATIONGROUP from  APP.WSP intersect select COURSEBOOKED from APP.BOOKCOURSE"

导致我想要存储在ARRAY或变量中的ISO和COMMUNICATION。

第二部分

select count(COURSEBOOKED) from APP.BOOKCOURSE where COURSEBOOKED = Variable1
 rs.getString(Count(COURSEBOOKED))
 value returned == 5

再次为COMMUNICATION和数组中的任何其他课程执行此过程,其中使用后从计数查询返回的值减去WSP总减去TA总数。

我希望这是有道理的

按要求提供第一个查询

private void updateTable(){
    String sql = "Select QUALIFICATIONGROUP from  APP.WSP intersect select COURSEBOOKED from APP.BOOKCOURSE";
   try (Connection con = DriverManager.getConnection("jdbc:derby:MTD","herbert","elsie1*#");
       PreparedStatement pst = con.prepareStatement(sql);){
        ResultSet rs = pst.executeQuery();
        //while (rs.next()){
       jTable1.setModel(DbUtils.resultSetToTableModel(rs)); 
        //}
   }

   catch (Exception ex) {

       JOptionPane.showMessageDialog(null, ex);


   }

这将为我提供WSP中的数据,该数据也存在于AT中并显示在表格中。

第二个查询现在应该取表中第一行的第一个值并将其传递给第二个查询,如下所示

public void tableOne() throws Exception{
    String search = "value of first row from the query ontop";
    PreparedStatement pst = null;
    ResultSet rs = null;
    try{
        Connection con = DriverManager.getConnection("jdbc:derby:MTD","herbert","elsie1*#");
        String sql = "SELECT COUNT(COURSEBOOKED) from APP.BOOKCOURSE where COURSE BOOKED = '"+search+"'";
        pst = con.prepareStatement(sql);
        rs = pst.executeQuery();
        while(rs.next()){
            sum = rs.getString("COUNT(COURSEBOOKED)");
            txtSum.setText(sum);
        }
    }
    catch(Exception e){
        JOptionPane.showMessageDialog(this, e);
    }
}

此查询应该与第一个查询生成的行一样多次运行。

此查询选择WSP表中的所有数据。

public void tableTwo() throws Exception{
    String sql = "select * from APP.WSP";
    try(Connection con = DriverManager.getConnection("jdbc:derby:MTD","herbert","elsie1*#");
        PreparedStatement pst = con.prepareStatement(sql);){
        ResultSet rs = pst.executeQuery();
        while(rs.next()){
            jTable1.setModel(DbUtils.resultSetToTableModel(rs));
            search= rs.getString("QUALIFICATIONGROUP"); //sets the search string for tableOne();
            next = rs.getInt("TOTALTRAININGPLANNED");
            System.out.println(search);
            System.out.println("");
            System.out.println(next);
        }
    }
    catch(SQLException e){
        JOptionPane.showMessageDialog(this, e);
    }
}

最后,第二个查询的计数值用于减去这些值 来自变量next(next = rs.getInt(" TOTALTRAININGPLANNED");)从最后一个查询生成,最后一个值为next = rs.getInt(" TOTALTRAININGPLANNED") - 值第二个Count查询存储在一个变量中,该变量将用于显示计划的培训和实际培训是相同还是不同。

我希望我澄清了问题

0 个答案:

没有答案