模糊查询书按照书名-------------------
java.sql.SQLException: Illegal mix of collations (gb2312_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1448)
MySql中的编码集为:utf-8 或gbk 都试过了,还是出现这样的错误jsp文件为utf-8的我的查询语句为:String sql="SELECT `books`.`id`, `books`.`book_name`,`books`.`price`,`books`.`book_info`," +
"`books`.`author`,`books`.`img_url` " +
" FROM `books` " +
"where `books`.`book_name` like ? ";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1, '%'+bkname+'%');
ResultSet rs=ps.executeQuery();错在哪里,实在是找不出原因了。求助高手帮帮忙!!谢谢!!
模糊查询书按照书名-------------------
java.sql.SQLException: Illegal mix of collations (gb2312_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3256)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1448)
at com.dong.bean.BookBean.findByName(BookBean.java:137)
at org.apache.jsp.showBook_jsp._jspService(showBook_jsp.java:95)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
ps.setString(1, "'%"+bkname+"%'");
ps.setString(1, "%"+bkname+"%");
同样出现上面的错误
character_set_client
现在把数据库编码方式改为gbk,
我的jsp的编码方式为utf-8
这样还是有同样错误
到底改成什么样的编码方式呢
求救!!
我的jsp的编码方式为utf-8
也不行
"`books`.`author`,`books`.`img_url` " +
" FROM `books` " +
"where `books`.`book_name` like ? ";
呵呵,没太看懂,引号太多了吧?学过SQL Server,也在MySQL下用过命令行操作各种SQL语句
先这样试试string sql = "select * from tablename where condition like ?";
先查select * from book;试试看会不会出问题,缩小问题的范围,应该就是你这第语句的写法的问题,我没见过这么多引号的SQL语句 books.book_name直接就这样引用就行了吧?
`books`.`id`,
`books`.`book_name`,
`books`.`price`,
`books`.`book_info`,
`books`.`author`,
`books`.`img_url`
FROM
`books`
where `books`.`book_name` like '%寻找%'
上面是MySql中查询器中运行时的代码
正常运行,能出现想要的结果,
就是在java代码中不能,出现错误
引号都是MySql自己生成的,没有语法错误的
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;import com.dong.bean.BookBean;
import com.dong.po.Book;public class MysqlTest {
public static void main(String[] args) {
BookBean bookBean=new BookBean();
Collection<Book> collection=new ArrayList<Book>();
collection=bookBean.findByName("寻找");
System.out.println(collection.size());
for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
Book book = (Book) iterator.next();
System.out.println(book.getBook_name());
}
}
}1
书名:寻找大池塘的青蛙
测试正确,没有错误!!
为什么要这样写????
在命令行写的格式:select * from tb_name where name like '%dd%';
在程序中一样的道理。
在哪里加啊?
ps.setString(1,"'%"+bkname+"%'");
测试时就不通过了。
如果是乱码的话你就应该考虑JSP或者数据库换编码方式了。不知道数据库改变编码后其内部数据是不是也自动的转换编码方式。
非法混合排序规则,估计是编码的问题。确保数据库,jsp,servlet编码的统一
<%=request.getParameter("bkname") %>
打印出来是乱码我jsp的编码为:utf-8;
Book类为默认编码为:gbk
可是Book类的编码不能改,如果改了里面的代码有些就乱码了,而且运行错误
怎么办呢??求救!!!!!!!!!!!!!!!!!!!!!
ps.setString(1,"%"+“‘”+bkname+“’”+"%");
都试试
不知道对不