麻烦老师看一下sql语句哪里又出错了?
来源:5-2 项目作业
散落满天的回忆
2020-06-02 22:09:52
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.imooc.book.controller.GlobalController.service(GlobalController.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.imooc.book.global.EncodingFilter.doFilter(EncodingFilter.java:24)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: 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 'where b.category_id=4 order by b.id desc) tmp_count' at line 1
### The error may exist in com/imooc/book/dao/BookDao.java (best guess)
### The error may involve com.imooc.book.dao.BookDao.select-Inline
### The error occurred while setting parameters
### SQL: select count(0) from (select b.*,ca.name as cname from book as b left join category as ca on b.category_id=ca.id order by b.id desc where b.category_id=? order by b.id desc) tmp_count
### Cause: 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 'where b.category_id=4 order by b.id desc) tmp_count' at line 1
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy18.select(Unknown Source)
at com.imooc.book.biz.BookImp.select(BookImp.java:20)
at com.imooc.book.controller.DefaultController.index(DefaultController.java:36)
... 30 more
Caused by: 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 'where b.category_id=4 order by b.id desc) tmp_count' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2487)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at com.github.pagehelper.util.ExecutorUtil.executeAutoCount(ExecutorUtil.java:138)
at com.github.pagehelper.PageInterceptor.count(PageInterceptor.java:150)
at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:97)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy16.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
... 37 more
package com.imooc.book.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.imooc.book.biz.BookBiz;
import com.imooc.book.biz.BookImp;
import com.imooc.book.biz.CategoryBiz;
import com.imooc.book.biz.CategoryImp;
import com.imooc.book.entity.Book;
import com.imooc.book.entity.Category;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class DefaultController {
// /index.do
public void index(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){
//获取分类id
String id =httpServletRequest.getParameter("id");
int cid=0;
if (!"".equals(id)&& null != id){
cid=Integer.parseInt(id);
}
CategoryBiz categoryBiz=new CategoryImp();
BookBiz bookBiz=new BookImp();
List<Category> categoryList=categoryBiz.select();
httpServletRequest.getServletContext().setAttribute("categoryList",categoryList);
String pageNum=httpServletRequest.getParameter("pageNum");
if (pageNum==null){
pageNum="1";
}
PageHelper.startPage(Integer.parseInt(pageNum),5);
List<Book> list = bookBiz.select(cid);
PageInfo pageInfo=PageInfo.of(list);
httpServletRequest.setAttribute("pageInfo",pageInfo);
try {
httpServletRequest.getRequestDispatcher("/WEB-INF/page/admin/index.jsp").forward(httpServletRequest,httpServletResponse);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.imooc.book.dao;
import com.imooc.book.entity.Book;
import com.imooc.book.entity.Category;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface BookDao {
@Insert("<script>"
+"insert into book(id,category_id,name,level,price,img_path,create_time,update_time) values"+
"<foreach collection='list' item='list' separator=','>" +
"(null,#{list.categoryId},#{list.name},#{list.level},#{list.price},#{list.imgPath},#{list.createTime},#{list.updateTime})"+
"</foreach>"+
"</script>")
@Options(useGeneratedKeys = true,keyProperty = "id")
void batchInsert(List<Book> list);//批量添加商品
@Delete("delete from book where id=#{id}")
void delete(int id);
@Select("<script>"+
"select b.*,ca.name as cname from book as b left join category as ca on b.category_id=ca.id order by b.id desc"
+"<if test='id !=0'>"
+"where b.category_id=#{id}"
+"</if>"
+"order by b.id desc"
+"</script>"
)
@Results(id="all",value = {
@Result(column = "id",property = "id",id = true),
@Result(column = "category_id",property = "categoryId"),
@Result(column = "name",property = "name"),
@Result(column = "level",property = "level"),
@Result(column = "price",property = "price"),
@Result(column = "img_path",property = "imgPath"),
@Result(column ="create_time",property = "createTime"),
@Result(column = "update_time",property = "updateTime"),
@Result(column = "cname",property = "category.name")
})
List<Book> select(@Param(value="id")int id);//查询所有图书
@Select("select b.*,ca.name as cname from book as b left join category as ca on b.category_id=ca.id where b.category_id=#{id}")
@ResultMap("all")
List<Book> selectByid(int id);//根据图书分类id查询图书
}
1回答
同学你好,报错提示如下:
提示错误可能发生在BookDao.java类中,select语句错误,错误发生在设置参数时,SQL就是指报错的具体sql语句。
Order By是排序,必须在where条件后,在where条件前使用就会报错。
祝:学习愉快~
相似问题
回答 3
回答 1
回答 1
回答 2
回答 3