проверка нескольких флажков и отображает в jtable в Java NetBeans - PullRequest
0 голосов
/ 25 июня 2018

Добрый день

Я создал поисковую систему, где пользователь может установить флажок в соответствии с информацией, которую данные могут отображать в таблице, в соответствии со следующим рисунком. enter image description here

С чем я сталкиваюсь, данные отображаются только при установке одного флажка Как я могу отобразить несколько магазинов и шоу для меня на столе? Пример : Майор разыскивается в соответствии с дипломом средней школы Университет: МГУ Все результаты должны быть отображены в соответствии с этими двумя условиями Вот мои коды:

if (jCheckBox1.isSelected()){
            try {   
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hr","root","MZaa8891@");  
        String Sql="select recName, phoneNo,quali,major,Uni,status,IntDate,interviewer FROM hr.rect  where recName like ?  "; 
        ps= con.prepareStatement(Sql);
        ps.setString(1, jTextField1.getText()+"%");
        rs =ps.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
              }
        catch (Exception e){
        JOptionPane.showMessageDialog(null, e);
         }
         }
     if (jCheckBox2.isSelected()){
            try {   
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hr","root","MZaa8891@");  
        String Sql="select recName, phoneNo,quali,major,Uni,status,IntDate,interviewer FROM hr.rect  where phoneNo like ?  "; 
        ps= con.prepareStatement(Sql);
        ps.setString(1, jTextField2.getText()+"%");
        rs =ps.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
              }
        catch (Exception e){
        JOptionPane.showMessageDialog(null, e);
         }
         }
           if (jCheckBox3.isSelected()){
            try {   
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hr","root","MZaa8891@");  
        String Sql="select recName, phoneNo,quali,major,Uni,status,IntDate,interviewer FROM hr.rect  where quali like ?  "; 
        ps= con.prepareStatement(Sql);
        ps.setString(1, jTextField3.getText()+"%");
        rs =ps.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
              }
        catch (Exception e){
        JOptionPane.showMessageDialog(null, e);
         }
         }
       if (jCheckBox4.isSelected()){
            try {   
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hr","root","MZaa8891@");  
        String Sql="select recName, phoneNo,quali,major,Uni,status,IntDate,interviewer FROM hr.rect  where major like ?  "; 
        ps= con.prepareStatement(Sql);
        ps.setString(1, jTextField4.getText()+"%");
        rs =ps.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
              }
        catch (Exception e){
        JOptionPane.showMessageDialog(null, e);
         }
         }
         if (jCheckBox5.isSelected()){
            try {   
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hr","root","MZaa8891@");  
        String Sql="select recName, phoneNo,quali,major,Uni,status,IntDate,interviewer FROM hr.rect  where Uni like ?  "; 
        ps= con.prepareStatement(Sql);
        ps.setString(1, jTextField5.getText()+"%");
        rs =ps.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
              }
        catch (Exception e){
        JOptionPane.showMessageDialog(null, e);
         }
         }
        if (jCheckBox6.isSelected()){
            try {   
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hr","root","MZaa8891@");  
        String Sql="select recName, phoneNo,quali,major,Uni,status,IntDate,interviewer FROM hr.rect  where status like ?  "; 
        ps= con.prepareStatement(Sql);
        ps.setString(1, jTextField6.getText()+"%");
        rs =ps.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
              }
        catch (Exception e){
        JOptionPane.showMessageDialog(null, e);
         }
         }
       if (jCheckBox7.isSelected()){
            try {   
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hr","root","MZaa8891@");  
        String Sql="select recName, phoneNo,quali,major,Uni,status,IntDate,interviewer FROM hr.rect  where IntDate like ?  "; 
        ps= con.prepareStatement(Sql);
        ps.setString(1, jTextField7.getText()+"%");
        rs =ps.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
              }
        catch (Exception e){
        JOptionPane.showMessageDialog(null, e);
         }
         }
         if (jCheckBox8.isSelected()){
            try {   
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hr","root","MZaa8891@");  
        String Sql="select recName, phoneNo,quali,major,Uni,status,IntDate,interviewer FROM hr.rect  where interviewer like ?  "; 
        ps= con.prepareStatement(Sql);
        ps.setString(1, jTextField8.getText()+"%");
        rs =ps.executeQuery();
        jTable1.setModel(DbUtils.resultSetToTableModel(rs));
              }
        catch (Exception e){
        JOptionPane.showMessageDialog(null, e);
         }
         } 

Есть идеи?

1 Ответ

0 голосов
/ 25 июня 2018

Необходимо определить два динамических понятия: «ограничения запроса» и «значения запроса».

Хотя ограничение связано со значением, они применяются в разные моменты времени.Эта концепция может очень быстро развиваться.

Давайте начнем с очень простой идеи.Привязка «столбца» и «значения» ...

public static interface Query {
    public String getColumnName();
    public String getColumnValue();

    public String build();
    public void bind(int index, PreparedStatement ps) throws SQLException;
}

public static class DefaultQuery implements Query {

    private String columnName;
    private String columnValue;

    public DefaultQuery(String columnName, String columnValue) {
        this.columnName = columnName;
        this.columnValue = columnValue;
    }

    @Override
    public String getColumnName() {
        return columnName;
    }

    @Override
    public String getColumnValue() {
        return columnValue;
    }

    public String build() {
        return getColumnName() + " like ?";
    }

    @Override
    public void bind(int index, PreparedStatement ps) throws SQLException {
        ps.setString(index, getColumnValue());
    }

}

Все, что это делает, позволяет легко управлять «столбцом» и «значением», которое мы хотим запросить.Вокруг этого можно создавать всевозможные понятия, например, свойства «и» / «или», но это быстро становится невероятно сложным.

Далее нам нужен «базовый» запрос, который можно выполнить даже без каких-либо ограничений....

String baseQuery = "select recName, phoneNo,quali,major,Uni,status,IntDate,interviewer FROM hr.rect";

Далее нам нужно составить список возможных ограничений, которые будут применены ...

List<Query> constraints = new ArrayList<>(25);
if (jCheckBox1.isSelected()) {
    constraints.add(new DefaultQuery("recName", jTextField1.getText() + "%"));
}
if (jCheckBox2.isSelected()) {
    constraints.add(new DefaultQuery("phoneNo", jTextField2.getText() + "%"));
}
if (jCheckBox2.isSelected()) {
    constraints.add(new DefaultQuery("quali", jTextField3.getText() + "%"));
}
//...

Как только мы это получим, мы сможем построить "запрос", который мыхочу сделать (включая «базовый» запрос и любые ограничения)

if (!constraints.isEmpty()) {
    StringJoiner whereConstraint = new StringJoiner(" and ", " where ", "");
    for (Query query : constraints) {
        whereConstraint.add(query.build());
    }
    baseQuery += whereConstraint.toString();
}

Далее нам нужно привязать значения к запросу и выполнить его ...

try (Connection con = ...; PreparedStatement ps = con.prepareStatement(baseQuery)) {
    if (!constraints.isEmpty()) {
        int index = 1;
        for (Query query : constraints) {
            query.bind(index++, ps);
        }
    }
    ResultSet rs = ps.executeQuery();
    //...
} catch (SQLException ex) {
    ex.printStackTrace();
}
...