将数据库中的值与字符串进行比较时出错java.sql.SQLException:未为参数1指定值

将数据库中的值与字符串进行比较时出错java.sql.SQLException:未为参数1指定值,java,mysql,Java,Mysql,我想创建一个只有管理员才能登录的登录页面 我的数据库: -tb_用户 用户id(主键) 密码 -tb_userauth 用户id(FK) 对象\u id(包含用户角色,如管理员和客户) 这是我的节目: private void cmd_loginActionPerformed(java.awt.event.ActionEvent evt) { try{ String sql = "sele

我想创建一个只有管理员才能登录的登录页面

我的数据库: -tb_用户 用户id(主键) 密码

-tb_userauth 用户id(FK) 对象\u id(包含用户角色,如管理员和客户)

这是我的节目:

private void cmd_loginActionPerformed(java.awt.event.ActionEvent evt) {                                          
    try{
        String sql = "select * from tb_users where user_id=? and password=?";           
        PST=conn.prepareStatement(sql);
        PST.setString(1,txt_userid.getText());
        PST.setString(2, txt_pass.getText());
        RS=PST.executeQuery();
        RS.close();


        String sql2 = "select * from tb_userauth where objects_id=?";           
        PST=conn.prepareStatement(sql2);
        RS=PST.executeQuery();
        String objek = "admin";
        String objek_id = RS.getString("objects_id");        

        if(RS.next()){

             if (objek.equals(objek_id)){

            JOptionPane.showMessageDialog(null,"user id and password correct");
             submenu1 sm1 = new submenu1();
             sm1.setVisible(true);
             sm1.pack();
             sm1.setLocationRelativeTo(null);
             sm1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             this.dispose();
        }else{
            JOptionPane.showMessageDialog(null,"check your password and user id ");
        } }  

    }catch (Exception e){
        JOptionPane.showMessageDialog(null,e);
    }


}
我得到了这样一个错误: java.sql.SQLException:没有为参数1指定值

这让我感到困惑,因为我已经在使用字符串objek_id=RS.getString(“objects_id”)


我的结果集有问题吗?

您错过了第二条准备语句的参数。我猜您在查询中犯了一些错误,所以我更改了查询并在更改中进行了注释。我没有运行和测试,因此可能存在一些问题。你可以有这个想法

private void cmd_loginActionPerformed(java.awt.event.ActionEvent evt) {                                          
  try{
    String sql = "select * from tb_users where user_id=? and password=?";           
    PST=conn.prepareStatement(sql);
    PST.setString(1,txt_userid.getText());
    PST.setString(2, txt_pass.getText());
    RS=PST.executeQuery();
    String user_id = RS.getString("user_id"); //I don't know the type of use_id so I guess it as string

    RS.close();


    String sql2 = "select * from tb_userauth where user_id=?"; //I change object_id to user_id   

    PST=conn.prepareStatement(sql2);
    PST.setString(1,user_id);//this might not be string
    RS=PST.executeQuery();
    String objek = "admin";
    String objek_id = RS.getString("objects_id");        

    if(RS.next()){

         if (objek.equals(objek_id)){

        JOptionPane.showMessageDialog(null,"user id and password correct");
         submenu1 sm1 = new submenu1();
         sm1.setVisible(true);
         sm1.pack();
         sm1.setLocationRelativeTo(null);
         sm1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         this.dispose();
    }else{
        JOptionPane.showMessageDialog(null,"check your password and user id ");
    } 
  }  

  }catch (Exception e){
    JOptionPane.showMessageDialog(null,e);
  }


}

您没有在第二次查询中设置参数(
objects\u id
)。有什么不清楚的?是“tb\U用户”表有“objects\u id”列没有。tb_用户是父表@Janith1024您所说的参数是什么意思?我使用字符串objek_id=RS.getString(“objects_id”);为了从数据库中获取值,我将其与字符串objek=“admin”进行比较@shmoselnot仅查询行末尾的其他所有注释。然后java.sql.SQLException:不应该发生为参数1异常指定的值。这里有一些通信错误。。我使用第二个查询从数据库中获取对象id的值,然后将其与“admin”进行比较。如果我将第二个查询更改为字符串sql2=“select*from tb_userauth where user_id=?”;正如您所建议的那样,我不会从objects_id@janith1024中重设任何值。当然,我不仅要更改查询。我还更改了您对其添加注释的每个语句,然后只需删除第二个queryit的where条件即可。但在结果集@janith1024开始之前出现了另一个错误java.sql.sqlexception