- 前言
- 1. 原理
- 2. 解决方法
建立ssm项目的时候,出现这个问题
登录的时候页面还可以正常显示
但是前进或者后退的时候信息开始出错了
出现了如下错误
类型 异常报告 消息 Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'ssmbulid.books' doesn't exist ### The error may exist in com/kk/dao/BookMapper.xml ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: select * from ssmbulid.books ### Cause: java.sql.SQLSyntaxErrorException: Table 'ssmbulid.books' doesn't exist ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table 'ssmbulid.books' doesn't exist org.springframework.web.servlet.frameworkServlet.processRequest(frameworkServlet.java:1013) org.springframework.web.servlet.frameworkServlet.doGet(frameworkServlet.java:897) javax.servlet.http.HttpServlet.service(HttpServlet.java:655) org.springframework.web.servlet.frameworkServlet.service(frameworkServlet.java:882) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)1. 原理
出现bug就要解决bug
带你由浅入深的分析bug,寻找bug的原理
通过查看其错误信息,显示其数据库的表查不到
不太可能是 BookMapper.xml文件代码出错,如果出错,会直接显示代码问题而不是说数据库找不到
确保xml文件配置等信息都正确的情况下(一定正确,不然也不会出现这个问题)
此处顺便讲解一下mapper文件
注意格式要正确,数据库.表名或者直接表名都可以
那么大概率就是配置信息的bug
地址账号密码都正确了嘛??
其实错误信息很隐秘,一个url路径的出错问题
2. 解决方法mysql使用schema标识库名而不是catalog
数据库会统一找表格, 即使同名也不会细查
多添加一个参数nullCatalogMeansCurrent=true就会默认其数据库操作,8以上的版本号不会默认就会出错
或者通过设置区号等信息配置,主要都是url的路径配置的问题
将其配置数据库连接信息的配置
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true username=root password=123456
方法一(万能)
其中url路径更改为jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
这个是通用的方法(本身博主的mysql版本配置为5左右)
如图所示
如果上面的方法还执行不通
将其url路径改为以下方法(涉及mysql版本号)
方法二
只要增加以上条件即可nullCatalogMeansCurrent=true
如果以上两种方法都执行不通,将其mysql版本号更改为5左右,可能版本号更新,某些配置已经更改了



