java mysql模糊查询有问题 请纠错

importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStateme... import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class section17082{
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/leo";
public static final String DBUSER = "root";
public static final String DBPASS = "admin";

public static void main(String[] args) throws Exception{
String key = "凡";
String sql = "SELECT id,name,age,birthday FROM mytab" +
"WHERE name LIKE ?";
Class.forName(DBDRIVER);
Connection con = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
PreparedStatement pre = con.prepareStatement(sql);
ResultSet res = pre.executeQuery();
pre.setString(1, "%" + key + "%");

while(res.next()){
int id = res.getInt(1);
String name = res.getString(2);
int age = res.getInt(3);
java.util.Date bir = res.getDate(4);
System.out.print("编号:" + id + ",");
System.out.print("姓名:" + name + ",");
System.out.print("年龄:" + age + ",");
System.out.println("生日:" + bir);
}
res.close();
pre.close();
con.close();
}
}

Exception in thread "main" java.sql.SQLException: No value specified for parameter 1
编译没问题,执行时出现了这个错误,求指出问题所在
展开
 我来答
邗启3V
2013-11-15 · TA获得超过7271个赞
知道大有可为答主
回答量:1413
采纳率:100%
帮助的人:1402万
展开全部
您好,应该是你的sql有问题:
String sql = "SELECT id,name,age,birthday FROM mytab" +
"WHERE name LIKE ?";
这个拼出来的sql应该是:SELECT id,name,age,birthday FROM mytabWHERE name LIKE ? ;
在mytab和WHERE 之间没有空格。
修改为:
String sql = "SELECT id,name,age,birthday FROM mytab" +
" WHERE name LIKE ?";
希望对你有帮助
tang19880414
2013-11-15 · TA获得超过368个赞
知道答主
回答量:68
采纳率:0%
帮助的人:32.5万
展开全部
ResultSet res = pre.executeQuery();
pre.setString(1, "%" + key + "%");
异常报的是没有给参数设值,位置调换下,先给参数设值在执行sql
pre.setString(1, "%" + key + "%");
ResultSet res = pre.executeQuery();
追问
试了,改完出现 'LIKE '%·?%'' at line1,应该是语法问题
追答
mytab后面加个空格,你这样写mytab好像跟WHERE黏在一起了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
猜不透nph
2013-11-15 · 超过21用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:56万
展开全部
pre.setString(1, " '% " + key + " %' ");你的百分号左右貌似少个单引号
追问
非也,改完还是老样子
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
果然丨在动
2013-11-15 · TA获得超过719个赞
知道小有建树答主
回答量:672
采纳率:50%
帮助的人:337万
展开全部
我觉得也是,mytab 和 WHERE 之间少了个空格、
你可以把sql语句打印出来 System.out.println(sql)、
在WHERE前面或mytab后面加个空格就好了、
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
游览地球
2013-11-15 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:86.5万
展开全部
String sql = "SELECT id,name,age,birthday FROM mytab" +
"WHERE name LIKE % ? %";
pre.setString(1, key );
追问
改完出现这个问题
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 'LIKE %'·?'%' at line1
追答
String sql = "SELECT id,name,age,birthday FROM mytab" +
"WHERE name LIKE %‘“+ ? +”’%";
sql查询,字符串,需要加一个单引号,
pre.setString(1, key );
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式