2016-03-10 2 views
0

Я использую valueChanged(), чтобы установить выбранный узел JTree в JTable, но я замечаю, что я не получил результата при использовании WHERE. и получил целый результат после удаления WHERE.SQL: WHERE не работает с JTable

@Override 
public void valueChanged(TreeSelectionEvent tsl) { 
    try { 
     DefaultMutableTreeNode node = (DefaultMutableTreeNode) TestTree.getSelectionPath().getLastPathComponent(); 
    myTests_table.getModel(); 

     if (tsl.getNewLeadSelectionPath() != null) { 
      if (node.isLeaf() != true) { 
       //do nothing 
      } else { 
       String sql ="SELECT sub_group.name AS 'name', sub_group.price AS 'price'" 
         + "FROM sub_group" 
         + "WHERE sub_group.name = '"+node+"' " 
         + "ORDER BY sub_group.name ASC"; 

       pst = conn.prepareStatement(sql); 
       rs = pst.executeQuery(sql); 
       while (rs.next()) { 
        myTests_table.setModel(DbUtils.resultSetToTableModel(rs)); 
       } 

       System.out.println(node); 
       JOptionPane.showMessageDialog(null, node); 
       yy.setText(tsl.getNewLeadSelectionPath().getLastPathComponent().toString()); 

      } 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, "Error"); 
    } finally { 
     try { 
      rs.close(); 
      pst.close(); 
     } catch (Exception e) { 
      JOptionPane.showMessageDialog(null, "Some Error with connecting Database, Try again"); 
     } 
    } 
} 

Но когда IAM используя эту линию

+ "WHERE sub_group.name = '"+node+"' " 

я получил Empy таблицу, так что неправильно с.?!

ответ

0

Я бы предположил, что переменная узла не содержит строкового значения, которое вы ожидаете от этого. Вы показываете представление toString() узла где-нибудь, чтобы проверить значение?

Кроме того, при использовании SQL используйте PreparedStatement. PreparedStament будет правильно форматировать SQL, поэтому вам не нужно беспокоиться об ограничителях вокруг ваших переменных. Может быть, что-то вроде:

String sql ="SELECT name, price FROM sub_group WHERE name = ?"; 
PreparedStatement stmt = connection.prepareStatement(sql); 
stmt.setString(1, node); 
stmt.executeUpdate(); 

Кроме того, я считаю, что соглашение заключается в использовании смешанных имен папок для таблицы и столбцов.

1

Код недостаточно для проверки. Обновление общего кода или делать SYSOUT и результаты обновления он может можно увидеть, что ошибка

String sql ="SELECT sub_group.name AS 'name', sub_group.price AS 'price'" 
        + "FROM sub_group" 
        + "WHERE sub_group.name = '"+node+"' " 
        + "ORDER BY sub_group.name ASC"; 
System.out.println(sql); 
0

Вместо = (равно оператор) использовать как

String sql ="SELECT sub_group.name AS 'name', sub_group.price AS 'price'" 
         + "FROM sub_group" 
         + "WHERE sub_group.name like '"+node+"' " 
         + "ORDER BY sub_group.name ASC"; 
Смежные вопросы