Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名:");
String name=sc.nextLine();
System.out.println("请输入密码::");
String psd=sc.nextLine();
String sql="SELECT * FROM users where sname=? AND spassword=?";
PreparedStatement pst=con.prepareStatement(sql);
//调用pst对象set方法,
pst.setString(1,name);
pst.setString(2,psd);
System.out.println(sql);
ResultSet rs=pst.executeQuery(sql);
输出台:
”
请输入用户名:
a
请输入密码::
1
SELECT * FROM users where sname=? AND spassword=?
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AND spassword=?' at line 1
你这行代码是错的:
ResultSet rs=pst.executeQuery(sql);
sql是你原来带有占位符?的字符串,你这里作为参数传入,就等于直接执行这条sql了,你的预处理就完全没有意义了。
改为下面的试试:
ResultSet rs=pst.executeQuery();
你是说PreparedStatement已经将sql语句预编译好了,调用结果集就可以直接用PreparedStatement的对象直接调用结果集。是这样吗?
PreparedStatement pst=con.prepareStatement(sql);
先把这两个参数打印出来;看看有没有值先
这两个参数可以打印出来