Java 选择在tableModel中仅返回一个数组值的SQL查询

Java 选择在tableModel中仅返回一个数组值的SQL查询,java,tablemodel,Java,Tablemodel,我试图从数据库中的一个特定categories表中获取具有类似类别名称的商品的行,并且,对于每一行,我进行了第二次SQL查询,以从orders表中汇总过去一周内的订单数量。我希望将结果添加到表模型中,但只添加一行 private void analyticsTableQuery(String Category) { this.categorySelected = Category; categoryTitle.setText(Category); int ordered;

我试图从数据库中的一个特定
categories
表中获取具有类似类别名称的商品的行,并且,对于每一行,我进行了第二次SQL查询,以从
orders表中汇总过去一周内的订单数量。我希望将结果添加到表模型中,但只添加一行

private void analyticsTableQuery(String Category) {
    this.categorySelected = Category;
    categoryTitle.setText(Category);
   int ordered;
    int initial;
    String query2 = "SELECT * FROM stock INNER JOIN category ON stock.Category_id=category.id where category.Category_Name='"+Category+"'";
    try {
            con = DriverManager.getConnection("jdbc:mysql://194.5.156.94:3306/u843360242_tukule?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","u843360242_tukule","cocaine");
            pst = con.prepareStatement(query2);
            rs=pst.executeQuery();
            DefaultTableModel tm=(DefaultTableModel)analyticsTable.getModel();
            tm.setRowCount(0);
         while(rs.next()){
                int id = rs.getInt("stock.id");
                int current = rs.getInt("stock.Quantity");
                String name = rs.getString("stock.Name");
                String price = rs.getString("stock.Price");
                String query = "SELECT sum(Quantity) as 'sum' FROM `orders` WHERE Created_at >= DATE(CURRENT_DATE() -7) 
                and Stock_id ="+id; 
                try {
               con = DriverManager.getConnection("jdbc:mysql://localhost:3306/u843360242_tukule 
         useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","root","");
               pst = con.prepareStatement(query);
               rs=pst.executeQuery();
               rs.next();
                   if(rs.getInt("sum") > 0)
                {
                  ordered = rs.getInt("sum");
                  initial = current + ordered;
                }
                else{ 
                  ordered = 0;
                  initial = current + ordered;
                }
                   Object o[]={
                            name,
                            price,
                            initial};
                   tm.addRow(o); 
               } catch (SQLException ex) {
                   Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
               }     
           }             
     } catch (SQLException ex) {
        Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
     }  
}   

您正在对外部和内部结果使用resultset
rs
。 使用内部结果集重新初始化
rs
,会影响外部循环条件。
即使循环进行时,
rs
中仍有行,读取
id、quantity、name
等列也会导致异常,因为新的结果集
rs

中可能不存在这些列,您的连接、语句和结果集(
con
pst
rs
)都是无效的在
while(rs.next())
循环中“重写”。这是故意的吗?是的。只要它在一个单独的try块中,它就可以正常工作。我认为这只是一个轻微的逻辑问题,但我不知道在哪里,因为
rs
正在重新初始化(“重写”)…..;)谢谢@Codeek。在第二次查询中重新初始化的resultSet变量对它产生了很大的影响。谢谢。@Mariwa,您可以随时向上投票并将其标记为答案,只需说:P