Выберите SQL запрос, возвращающий только одно значение массива в tableModel - PullRequest
0 голосов
/ 15 апреля 2020

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

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);
     }  
}   

1 Ответ

0 голосов
/ 15 апреля 2020

Вы используете набор результатов rs для внешних и внутренних результатов. повторная инициализация rs с внутренним набором результатов влияет на ваше внешнее условие l oop. И даже если в rs все еще есть строки, из-за которых l oop прогрессирует, чтение столбцов, таких как id, quantity, name et c, приведет к исключению, поскольку столбцы могут отсутствовать в новом наборе результатов rs.

...