文章目录

  • 1. Table 'jqp.spring_session' doesn't exist
    • 1.1 分析问题
    • 1.2 解决问题
      • 1.2.1 第一种解决方法
      • 1.2.2 第二种解决方式
  • 2. Table x doesn't exist
  • 3. You have an error in your SQL syntax;
  • 4. Unknown column x in x
  • 5. Unknown column 'xxx' in 'where clause'

1. Table ‘jqp.spring_session’ doesn’t exist

我们有时在启动本地项目,或者启动git上下载的源码时,会报错如下错误:

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [DELETE FROM SPRING_SESSION WHERE EXPIRY_TIME < ?]; nested exception is java.sql.SQLSyntaxErrorException: Table 'jqp.spring_session' doesn't existat org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:960) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1015) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1025) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.session.jdbc.JdbcIndexedSessionRepository.lambda$cleanUpExpiredSessions$8(JdbcIndexedSessionRepository.java:587) ~[spring-session-jdbc-2.6.1.jar:2.6.1]at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) ~[spring-tx-5.3.14.jar:5.3.14]at org.springframework.session.jdbc.JdbcIndexedSessionRepository.cleanUpExpiredSessions(JdbcIndexedSessionRepository.java:587) ~[spring-session-jdbc-2.6.1.jar:2.6.1]at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.3.14.jar:5.3.14]at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:95) [spring-context-5.3.14.jar:5.3.14]at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_102]at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) [na:1.8.0_102]at java.util.concurrent.FutureTask.run(FutureTask.java) [na:1.8.0_102]at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_102]at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_102]at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_102]at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_102]at java.lang.Thread.run(Thread.java:745) [na:1.8.0_102]
Caused by: java.sql.SQLSyntaxErrorException: Table 'jqp.spring_session' doesn't existat com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.27.jar:8.0.27]at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.27.jar:8.0.27]at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) ~[mysql-connector-java-8.0.27.jar:8.0.27]at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1098) ~[mysql-connector-java-8.0.27.jar:8.0.27]at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1046) ~[mysql-connector-java-8.0.27.jar:8.0.27]at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1371) ~[mysql-connector-java-8.0.27.jar:8.0.27]at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1031) ~[mysql-connector-java-8.0.27.jar:8.0.27]at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-4.0.3.jar:na]at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-4.0.3.jar:na]at org.springframework.jdbc.core.JdbcTemplate.lambda$update$2(JdbcTemplate.java:965) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:651) ~[spring-jdbc-5.3.14.jar:5.3.14]... 16 common frames omitted

1.1 分析问题

bad SQL grammar [DELETE FROM SPRING_SESSION WHERE EXPIRY_TIME < ?]; nested exception is java.sql.SQLSyntaxErrorException: Table 'jqp.spring_session' doesn't exist,翻译成中文便是:错误的SQL语法[删除表SPRING_SESSION失败],因为jqp库中不存在spring_session表。

程序中为什么会报出这种错误呢?原来,我们在pom中引入了如下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>

1.2 解决问题

既然知道了问题,那么,可以采用如下方式解决

1.2.1 第一种解决方法

这种解决方法就是在pom文件中,注释掉当前依赖。

1.2.2 第二种解决方式

上文不是说没有spring_session表吗,我们可以手动创建这这张表,如下代码所示:

DROP TABLE IF EXISTS SPRING_SESSION_ATTRIBUTES;
DROP TABLE IF EXISTS SPRING_SESSION;-- 创建SPRING_SESSION表
CREATE TABLE SPRING_SESSION (PRIMARY_ID CHAR(36) NOT NULL,SESSION_ID CHAR(36) NOT NULL,CREATION_TIME BIGINT NOT NULL,LAST_ACCESS_TIME BIGINT NOT NULL,MAX_INACTIVE_INTERVAL INT NOT NULL,EXPIRY_TIME BIGINT NOT NULL,PRINCIPAL_NAME VARCHAR(100),CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)
) ENGINE=INNODB ROW_FORMAT=DYNAMIC;CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);
CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);
CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);-- 创建spring_session属性表
CREATE TABLE SPRING_SESSION_ATTRIBUTES (SESSION_PRIMARY_ID CHAR(36) NOT NULL,ATTRIBUTE_NAME VARCHAR(200) NOT NULL,ATTRIBUTE_BYTES BLOB NOT NULL,CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME),CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE
) ENGINE=INNODB ROW_FORMAT=DYNAMIC;

2. Table x doesn’t exist

一般报出这种问题PreparedStatementCallback:bad SQL grammar [DELETE FROM xxx WHERE ?]...Table xxx doesn't exist的原因是,项目所涉及到的数据库中没有当前表,如下所示:

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select * from Dynamic_Task where timer_Task_Status is null or timer_Task_Status = ? ]; nested exception is java.sql.SQLSyntaxErrorException: Table 'jqp.dynamic_task' doesn't existat org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:744) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:757) ~[spring-jdbc-5.3.14.jar:5.3.14]at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:815) ~[spring-jdbc-5.3.14.jar:5.3.14]at com.jqp.admin.db.service.impl.MysqlJdbcDaoImpl.find(MysqlJdbcDaoImpl.java:109) ~[classes/:na]

直接在项目中创建当前缺失的表即可。

3. You have an error in your SQL syntax;

nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax

这种情况的错误一般是,我们在使用orm框架,比如mybatis框架、hibernate框架。我们在编写映射代码时,由于标点符号不正确,或者其他编写不正确,造成生成的mysql语句,出现了mysql语法的错误,如下代码所示:

SELECTDATE_FORMAT( pay_order.pay_time, '%Y%m%d' ) AS pay_time,pay_order.pay_type_code AS pay_type_code,park.NAME AS park_name
FROM`pay_order`
LEFT JOIN park_order ON pay_order.trade_pay_no = park_order.id
LEFT JOIN park ON park_order.park_id = park.id
WHEREpay_order.STATUS = 2<if test="trandate !=null and trandate!=''">and DATE_FORMAT(pay_order.pay_time,'%Y%m%d') = #{trandate}</if><if test="parkName !=null and parkName!=''">and park.name = #{parkName}</if><if test="payType !=null and payType!=''">and pay_order.pay_type_code = #{payType};</if>
GROUP BYpay_time,pay_type_code,park_name

上述mysqlNavicat中可以执行,后来才发现在group by关键字前面,也就是最后一个if的后面,多加了一个逗号,

此时,我们需要检查我们的映射代码,即一定要仔细检查mysql

4. Unknown column x in x

如下问题所述


java.sql.SQLSyntaxErrorException: Unknown column ‘lastname’ in ‘field list’; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Unknown column ‘lastname’ in ‘field list’
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
at com.sun.proxy.$Proxy54.selectOne(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:159)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:90)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
at com.sun.proxy.$Proxy60.selectById(Unknown Source)
at cn.yswu.test.select(test.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

这种错误一般是数据库中的字段与Java程序实体pojo或者entity类中定义的字段不匹配。

观察发现mysql中为last_name字段,经过驼峰转换可为lastName,但pojo类中则定义了lastname,改为lastName即可。

5. Unknown column ‘xxx’ in ‘where clause’

如下代码所示:

@Override
public List<Enterprise> getUserEnterpriseList(User user) {List<Enterprise> list = jdbcService.find("select * from enterprise where id in(" +"select enterprise_id id from enterprise_manager " +"where user_id = ? " +"union all " +"select enterprise_id from enterprise_user " +"where user_id = ? ) ",Enterprise.class,user.getId(),user.getId());return list;
}

报出的错误是:


错误原因是我在enterprise 表中未创建user_id 字段。

一般这种错误就是没有在指定表中创建对应的字段,在表中创建该字段即可。

java.sql.SQLSyntaxErrorException问题常见解决方案:比如Table xxx doesn‘t exist;Unknown column ‘xxx‘ in ‘where...相关推荐

  1. Cause: java.sql.SQLException: Incorrect string value: ‘\xF4\x80\x80\x82\xF4\x80...‘ for column ‘xxx‘

    1.报错信息: Cause: java.sql.SQLException: Incorrect string value: '\xF4\x80\x80\x82\xF4\x80...' for colu ...

  2. java.sql.SQLException: Incorrect string value: ‘\xE4\xB8\x8A\xE6\xB5\xB7‘ for column ‘xxx‘

    解决:java.sql.SQLException: Incorrect string value: '\xE4\xB8\x8A\xE6\xB5\xB7' for column 'xxx' 在这位兄台这 ...

  3. java.sql.SQLException: Incorrect string value: ‘\xE6\xB5\x8B\xE8\xAF\x95...‘ for column ‘xxx‘

    原因:sql表编码问题 解决办法 一.改变单个表属性 ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; 二.删除 ...

  4. SQL报错提示无效的标识符【Cause: java.sql.SQLSyntaxErrorException: ORA-00904: “WFT“.“PROC_DEF_ID“: 标识符无效】

    2022-12-12 11:42:35.942 INFO 6888 --- [ XNIO-1 task-27] c.s.c.b.b.w.i.APIxSecSignFilter : { APIxSecS ...

  5. java cause_java常见错误Cause java.sql.SQLSyntaxErrorException Table ‘m

    java常见错误Cause java.sql.SQLSyntaxErrorException Table 'm java常见错误:Cause: java.sql.SQLSyntaxErrorExcep ...

  6. java常见错误Cause java.sql.SQLSyntaxErrorException Table ‘m

    ###Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'mybatis.users' doesn't e ...

  7. 【Linux数据库注意问题】java.sql.SQLSyntaxErrorException: Table ‘e.USER‘ doesn‘t exist

    你知道吗??Linux的mysql竟然区分大小写!!!!! 项目场景: 这是一个连接远程数据库的项目,远程数据库是建立在Linux上的mysql! 问题描述 运行项目出现以下问题: java.sql. ...

  8. 使用mybatis-plus时容易出现的错误:java.sql.SQLSyntaxErrorException: Table ‘bookdata.book_data’ doesn’t exis异常处l

    使用mybatis-plus时容易出现的错误:java.sql.SQLSyntaxErrorException: Table 'bookdata.book_data' doesn't exist异常处 ...

  9. Spring Boot java.sql.SQLSyntaxErrorException: Table ‘mydb.table_name‘ doesn‘t exist

    我是强哥,一个在互联网苟且的男人 Spring Boot java.sql.SQLSyntaxErrorException: Table 'mydb.table_name' doesn't exist ...

最新文章

  1. 怎么查询网站的收录量
  2. BZOJ 3745: [Coci2015]Norma(分治)
  3. android textview 文字居中_Android布局优化,看这3点就够了
  4. ibm服务器芯片架构,IBM x366 服务器技术详解
  5. tensorflow学习笔记一:安装调试
  6. 如何在Python中显式释放内存?
  7. linux7telnet测试通是提示如何,如何优雅的使用telnet测试端口连通性
  8. 设计模式--模板方法模式(12)
  9. CFA 2020 notes的PDF版本,热乎乎的百度网盘分享
  10. nmf算法 python_推荐算法——非负矩阵分解(NMF)
  11. Lucene倒排索引简述 番外篇
  12. Linux终端界面Screen实现桌面共享
  13. Chrome 的小恐龙游戏,被我破解了
  14. 年轻人不再去菜市场,互联网如何拯救菜场摊贩?
  15. 华为复制加密门禁卡_将多种累赘门禁卡归一合并的最佳选择
  16. 一川烟草,满城飞絮,梅子黄时雨
  17. 机器学习(三)——决策树
  18. 关于测试中常用到的一些方法、策略总结
  19. spoj p104 Matrix-Tree定理
  20. 维度建模和范式建模对比

热门文章

  1. PVLAN-配置案例(图)
  2. 【模拟电路】常用的DC-DC电源电路图
  3. deform服务器位置,Deform V11 自动多工步分析(MO)设置详解-工艺成型及仿真
  4. 计算机视觉-图像的SIFT特征(尺度空间)
  5. 雷军手机使用时长曝光!一天刷抖音、微博、微信,办公仅34分钟
  6. thinkpad T400 X301 X230 T510 w500 W530 dell6400 dell1420 e6320 e6420 M6800 X201expresscard扩展nvme盘
  7. 数据清洗(一)-----------重复数据处理
  8. insert 插入数据
  9. LeetCode每日一题 1238.循环码排列
  10. word文件解除保护模式让其可编辑