错误显示java.sql.SQLException:参数索引超出范围(1>参数数量,为0)
我有三个表1.用户2.分支3用户分支。 我试图解决登录表单。但是当登录按钮被点击时,显示这个错误java.sql.SQLException:参数索引超出范围(1>参数数量,即0)。错误显示java.sql.SQLException:参数索引超出范围(1>参数数量,为0)
public Boolean loginApplication(Connection con, String uname, String pwd, String brnch) {
try {
PreparedStatement ps = con.prepareStatement("Select u.username,u.password,"
+ "b.branchname from user u, branch b ,userbranch ub"
+ "where u.userid = ub.userid and b.branchid=ub.branchid ");
ps.setString(1, uname);
ps.setString(2, pwd);
ps.setString(3, brnch);
ResultSet rs = ps.executeQuery();
System.out.println("query return " + rs);
if (rs.next()) {
return true;
//true if query found any corresponding data
}
else{
return false;
}
}
catch (SQLException ex) {
System.out.println("Error while validating " + ex);
return false;
}
}
private void buttonloginActionPerformed(java.awt.event.ActionEvent evt) {
String uname=username.getText();
String upass=userpassword.getText();
String ubranch=userbranch.getSelectedItem().toString().trim();
if(evt.getSource()==buttonlogin){
if(user.loginApplication(connect.getCon(),uname,upass,ubranch)){
System.out.println("success");
MainForm mainForm=new MainForm();
mainForm.setVisible(true);
}
}
else{
JOptionPane.showMessageDialog(null, "Login failed!","Failed!!",
JOptionPane.ERROR_MESSAGE);
}
}
显示错误:
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
基本上,问题是由错误消息所指示的。你的SQL语句没有参数,但你试图设置一些参数。
SQL语句中的(未命名)参数由?
占位符指示。
您的SQL没有任何参数:
Select u.username,u.password,b.branchname from user u, branch b, userbranch
ubwhere u.userid = ub.userid and b.branchid=ub.branchid
所以,当您尝试设置参数,它的失败。你可能想要:
and u.userid = ? and u.password = ? and b.branchid = ?
...或类似的东西。除此之外,建议您以纯文本格式存储密码,从安全角度来看,这可能是可怕的。
哦,我想你想ub
和where
之间的空间......
现在显示此错误@Jon Skeet ... com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行'u.password ='',b.branchname ='Select'附近使用正确的语法 – Snahar
@Snahar阅读本答案的最后一行。 –
你的职位是非常难读,由于所有的空行没有理由。请对其进行编辑,同时铭记您要求别人帮助您 - 让您尽可能轻松阅读是您的责任。 –
源代码中的单个空白行是* always *就足够了。 '{'之后或'}'之前的空行通常也是多余的。 –