将数据库中的值与字符串进行比较时出错java.sql.SQLException:未为参数1指定值
我想创建一个只有管理员才能登录的登录页面 我的数据库: -tb_用户 用户id(主键) 密码 -tb_userauth 用户id(FK) 对象\u id(包含用户角色,如管理员和客户) 这是我的节目:将数据库中的值与字符串进行比较时出错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
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