当前位置:编程学习 > JAVA >>

jsp中Mysql中查询语句中占位符问题

想用占位符实现页面对servlet传参,再对Mysql数据库进行查询,可是一直不知道哪错了
 代码
Connection conn = DriverManager.getConnection(url,username,password);
 String sql = "select * from tb_book where name=? or author=?";
 PreparedStatement ps= conn.prepareStatement(sql); 
 ps.setString(1,name); 
 ps.setString(2,author); 
 ResultSet rs = ps.executeQuery(sql);
出错信息
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 '? or author=?' at line 1  --------------------编程问答-------------------- sql语句有问题吧,你先不用占位符试下可以不 --------------------编程问答-------------------- 不用占位符就可以了
但是
String sql = "update tb_book set bookcount=?where id=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, bookCount); 
ps.setInt(2, id); 
ps.executeUpdate(); 
是对的,可以执行出来,很郁闷的 --------------------编程问答-------------------- name author有这两个字段吗 --------------------编程问答-------------------- ResultSet rs = ps.executeQuery(sql);
改为
ResultSet rs = ps.executeQuery();
相信我,没错的! --------------------编程问答--------------------
引用 3 楼 huxiweng 的回复:
name author有这两个字段吗

在数据库里有的 --------------------编程问答--------------------
引用 4 楼 NNTT2010 的回复:
ResultSet rs = ps.executeQuery(sql);
改为
ResultSet rs = ps.executeQuery();
相信我,没错的!

恩恩,改了之后就正确了,但是为什么
 ps.setString(1,name); 
 ps.setString(2,author);
的情况下,只能识别数字查询不能识别汉字的查询呢
 



--------------------编程问答-------------------- 你在之前
 PreparedStatement ps= conn.prepareStatement(sql);
就已指定sql,后面对sql中的占位符?赋值,接着应该是直接执行就行了。
ResultSet rs = ps.executeQuery(sql)
指的是直接执行某的sql,这个时候你sql中的占位符?只是个字符而已 --------------------编程问答--------------------
引用 4 楼 NNTT2010 的回复:
ResultSet rs = ps.executeQuery(sql);
改为
ResultSet rs = ps.executeQuery();
相信我,没错的!

+1 --------------------编程问答--------------------
引用 6 楼 oTianZhongZi 的回复:
Quote: 引用 4 楼 NNTT2010 的回复:

ResultSet rs = ps.executeQuery(sql);
改为
ResultSet rs = ps.executeQuery();
相信我,没错的!

恩恩,改了之后就正确了,但是为什么
 ps.setString(1,name); 
 ps.setString(2,author);
的情况下,只能识别数字查询不能识别汉字的查询呢
 





那就看你汉字是否传值正确了。比如,后台汉字是否乱码..... --------------------编程问答--------------------
引用 7 楼 wing8756 的回复:
你在之前
 PreparedStatement ps= conn.prepareStatement(sql);
就已指定sql,后面对sql中的占位符?赋值,接着应该是直接执行就行了。
ResultSet rs = ps.executeQuery(sql)
指的是直接执行某的sql,这个时候你sql中的占位符?只是个字符而已

正解 --------------------编程问答--------------------
引用 9 楼 jackwumengfeng 的回复:
Quote: 引用 6 楼 oTianZhongZi 的回复:

Quote: 引用 4 楼 NNTT2010 的回复:

ResultSet rs = ps.executeQuery(sql);
改为
ResultSet rs = ps.executeQuery();
相信我,没错的!

恩恩,改了之后就正确了,但是为什么
 ps.setString(1,name); 
 ps.setString(2,author);
的情况下,只能识别数字查询不能识别汉字的查询呢
 





那就看你汉字是否传值正确了。比如,后台汉字是否乱码.....



你之前已经预编译了,所以最后执行的时候,不用再传入sql语句了,执行即可 --------------------编程问答--------------------
引用 6 楼 oTianZhongZi 的回复:
Quote: 引用 4 楼 NNTT2010 的回复:

ResultSet rs = ps.executeQuery(sql);
改为
ResultSet rs = ps.executeQuery();
相信我,没错的!

恩恩,改了之后就正确了,但是为什么
 ps.setString(1,name); 
 ps.setString(2,author);
的情况下,只能识别数字查询不能识别汉字的查询呢
 





你填写的内容,传到后台一定是乱码,你可以打印确认一下。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,