java模糊查询sql语句问题

ublic class Shbk{
public static final String DBDRIVER="org.gjt.mm.mysql.Driver";
public static final String dburl = "jdbc:mysql://localhost:3306/wang";
public static final String dbuser = "root";
public static final String dbpass = "wang";
public Shbk(String name,String book,String writer)throws Exception{
Connection coon=null; //连接数据库
PreparedStatement psmt=null; //数据库操作
ResultSet rs =null; //保存查询结果
JFrame frame =new JFrame("查询");
String[] titles={"id","姓名","书名","作者"};
Object[][] userinfo=new Object[10][4];
JButton but=new JButton("确定");
String sql="SELECT*"+" FROM library WHRERE name LIKE ? OR book LIKE ? OR writer LIKE ?";
Class.forName(DBDRIVER);
coon=DriverManager.getConnection(dburl,dbuser,dbpass);
psmt=coon.prepareStatement(sql);
psmt.setString(1,"%"+name+"%");
psmt.setString(2,"%"+book+"%");
psmt.setString(3,"%"+writer+"%");
rs=psmt.executeQuery();
for(int i=0;rs.next();i++){
userinfo[i][0]=rs.getInt(1);
userinfo[i][1]=rs.getString(2);
userinfo[i][2]=rs.getString(3);
userinfo[i][3]=rs.getString(4);
}
rs.close();
psmt.close();
coon.close();
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent arg0){
System.exit(1);
}
});
JTable table =new JTable(userinfo,titles);
JScrollPane sp=new JScrollPane(table);
frame.add(sp);
frame.pack();
frame.setLocation(500,350);
frame.setVisible(true);
}
}

编译无问题 运行后出错
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 'name LIKE '%ssss%' OR book LIKE '%123%' OR wri
ter LIKE '%xxx%'' at line 1

1.psmt.setString(1,"%"+name+"%");
psmt.setString(2,"%"+book+"%");
psmt.setString(3,"%"+writer+"%");

这边拼接字符串少了单引号。 "'%"+name+"'%"
2.SELECT* 最好select和*之间加一个空格
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-08-12
like 后面不需要加‘’ 可能跟你用的方法有关 psmt.setString(1,"%"+name+"%"); setString可能是自动添加引号了追问

我like后没加"啊

我like后没加"啊

追答

我不是说了么 可能是你用的setString自动加上去的

追问

那我该怎么改呢

追答

你试试setObject 或者干脆拼sql好了 不要用方法了

第2个回答  推荐于2017-10-09
你那个 在拼接 like语句是 要在外面加 单引号 如 ....like ‘%..%’

也就是 psmt.setString(1,"‘%"+name+"%’");

注意是 在 两边的 % 要在 单引号里面 其他改的方法一样本回答被提问者采纳
第3个回答  2018-03-13
select * 里面的*前后加个空格

PreparedStatement进行模糊查询时的问题
代码中使用PreparedStatement进行模糊查询,通过设置SQL语句中的`?`占位符,动态传入查询条件。首先,导入所需的Java SQL包,并定义连接数据库的参数,如驱动名、数据库连接URL、用户名和密码。尝试性地初始化数据库连接,调用`getConnection`方法并传入URL、用户名和密码。定义SQL语句,其内容为从`authors`表...

JAVA方法,SQL语句模糊查询?
String sql="select * from ARITCLE where type="+type+" and title like '%"++"%' and writer like '%"+writer+"'%";如果writer 这些参数是用户输入而且不经过处理的话 拼接字符串生成查询语句,会使SQL注入攻击变得相当容易

在java中的sql语句,能帮我解释一下么?
这是一条查询条件查询语句,拼接起来的sql,查询出center表中的所有字段,只是把center表中的depart_id换成了depart表中对应的depart_name,condition那部分是个模糊查询, 字符串的前面几位等于变量depart,就可以查出来

JAVA项目\/JSP页面 中 怎样实现模糊查询
jsp实现模糊查询 实际就是在后台使用 like关键字和 % 符号做查询 比如查询所有姓 王 的人.jsp文本框输入王 点击查询按钮 把文本框的值传入后台 在后台拼接sql语句 select * from user where name like '王%';'王%' 代表 以'王'字开头 后面没有、一个或多个字符 '%王%' 标识 只要字符中 ...

java后天怎么数据查询
使用JDBC连接数据库,然后写一条sql 语句 :"select * from table where rows like ‘% "+查询条件+"%'; 这是模糊查询。 然后 就是接受页面传过来的值就可以了!

急求java web代码,如图,点击精确查询,点击“确定”就可以精确查询,点击...
SQL语句中,精确查询都用“=”号,如:select * from 表名 where name='姓名' and address='地址' and code='身份证号',既然是精确查询,就要用and;如果是模糊查询就如:select * from 表名 where name like '%姓名%' or address like '%地址%' or code like '%身份证号%'...

sql 模糊查找
SQL模糊查询,使用like比较字,加上SQL里的通配符,请参考以下:1、LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。2、LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。3、LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、...

Java中怎么实现带参数的多条件的模糊查询?
or bookname = '%"+bookname or author = '%"+author+"%'"; = 号改成like 试试 2013年6月26日8:37:02 sql语句测试没问题.SELECT * FROM tbl_book WHERE isbn LIKE '%1%' OR bookname LIKE '%b%' OR author LIKE '%王五%'结果如下 数据库如下:我怀疑是你数据库的问题....

java的方法 实现模糊查询 想实现一个可编辑的下拉框 数据是数据库读出...
ajax异步交互就可以实现,思路就是他说的,每当你输入框内数据改变触发一个事件,事件执行的目的就是从后台取出匹配当前输入的信息列表,同时动态加载到前台的列表项中,同理,只要前台输入框内数据一改变,就进行一次数据库交互。但是页面不会闪,因为表面上不走后台。做的是异步交互。

java,如果数据库里有姓名,但是我需要查找某一个姓名,然后输出我想要的姓...
连接数据库,确保数据库和你的java project连接成功 编写模糊查询语句: select userName from user where userName like '%yourInputName%';获取结果集ResultSet,遍历里面的元素就好

相似回答