Как разобрать значения для функции набора результатов .equals? - PullRequest
0 голосов
/ 01 ноября 2019

изображение, показывающее мой jFrame

Я делаю кадр, который показывает записи в таблице sql по одному, используя текстовые поля, как показано. При написании кода для следующей кнопки мне нужно знать положение набора результатов, чтобы перейти к следующей записи. Для этой цели я использовал цикл do-while с условием «если». Ниже приведен мой код:

try{
        Connection conn=null;
        Statement stmt=null;
        ResultSet rs=null;
        String url="jdbc:mysql://localhost/MYORG", userid="root", pwd="shreyansh";
        conn=DriverManager.getConnection(url,userid,pwd);
        stmt=conn.createStatement();
        String query="select * from emp;";
        rs=stmt.executeQuery(query);
        String search=jTextField1.getText();
        String search1=jTextField2.getText();
        double search2=Double.parseDouble(jTextField3.getText());
        String search3=jTextField3.getText();
        rs.first();
        do{
            if(rs.equals(new Object[] {search, search1, search2, search3}))
                break;
        }while(rs.next());
        rs.next();
        String nm=rs.getString("Name");
        String desg=rs.getString("Designation");
        double pay=rs.getDouble("Pay");
        String city=rs.getString("City");
        jTextField1.setText(nm);
        jTextField2.setText(desg);
        jTextField3.setText(pay + "");
        jTextField4.setText(city);
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e.getMessage());
    }

Но он показывает ошибку "после завершения набора результатов". Пожалуйста, помогите мне с этим. Любые предложения по улучшению моего кода также приветствуются. Заранее спасибо !!

1 Ответ

1 голос
/ 02 ноября 2019

Вы не можете использовать ResultSet.equals для этого, потому что это не то, для чего предназначен Object.equals контракт. Он предназначен для проверки, равен ли объект другому объекту того же (или хотя бы совместимого) типа. Поэтому ResultSet никогда не будет равным массиву значений объекта.

Похоже, что вы хотите выбрать одну строку из таблицы emp, которая соответствует вашим поисковым значениям, в этом случае правильное решениеэто спросить базу данных только для этой строки. Выбор всех строк, а затем фильтрация в вашем приложении Java очень неэффективны, потому что база данных должна отправлять все строки в ваше приложение, в то время как поиск данных - это именно то, в чем база данных хороша.

Вместо этого вы должны использоватьгде пункт с подготовленным утверждением:

try (Connection connection = DriverManager.getConnection(url, userid, pwd);
     PreparedStatement pstmt = connection.prepareStatement(
         "select * from emp where Name = ? and Designation = ? and Pay = ? and City = ?")) {
   pstmt.setString(1, search);
   pstmt.setString(2, search1);
   pstmt.setDouble(3, search2);
   pstmt.setString(4, search3);
   try (ResultSet rs = pstmt.executeQuery()) {
       if (rs.next() {
           String nm = rs.getString("Name");
           String desg = rs.getString("Designation");
           double pay = rs.getDouble("Pay");
           String city = rs.getString("City");
           jTextField1.setText(nm);
           jTextField2.setText(desg);
           jTextField3.setText(String.valueOf(pay));
           jTextField4.setText(city);
       } else {
           // handle not found case
       }
   } 
}
...