首页 新闻 搜索 专区 学院

Java中使用PreparedStatement 中占位符传递变量报错,变量传递不进sql语句中

0
悬赏园豆:40 [已解决问题] 解决于 2020-07-13 10:32

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

dys帅的主页 dys帅 | 初学一级 | 园豆:166
提问于:2020-07-11 18:29
< >
分享
最佳答案
0

你这行代码是错的:
ResultSet rs=pst.executeQuery(sql);
sql是你原来带有占位符?的字符串,你这里作为参数传入,就等于直接执行这条sql了,你的预处理就完全没有意义了。
改为下面的试试:
ResultSet rs=pst.executeQuery();

收获园豆:40
。淑女范erり | 小虾三级 |园豆:799 | 2020-07-13 10:17

你是说PreparedStatement已经将sql语句预编译好了,调用结果集就可以直接用PreparedStatement的对象直接调用结果集。是这样吗?
PreparedStatement pst=con.prepareStatement(sql);

dys帅 | 园豆:166 (初学一级) | 2020-07-13 10:31
其他回答(1)
0

先把这两个参数打印出来;看看有没有值先

南小鸟 | 园豆:470 (菜鸟二级) | 2020-07-13 09:20

这两个参数可以打印出来

支持(0) 反对(0) dys帅 | 园豆:166 (初学一级) | 2020-07-13 09:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册