Caused by: com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingException:

SQL syntax error, expected token is 'EQ', actual token is 'IDENTIFIER',

这个问题是shardingjdbc的一个问题,因为它不支持某些SQL,如果不是必要进行分库分表的话,就不要使用 sharding-jdbc,因为会有诸多的限制和不方便(我的版本:1.5.4.1)可能是我的版本太旧了,也许升级下版本就可以了,但是我的项目比较复杂,升级可能会引出新的问题,所以就用了官方推荐的多数据源解决。

进入官网:http://shardingjdbc.io/
github源码:https://github.com/shardingjdbc/sharding-jdbc
官方demo:https://github.com/shardingjdbc/sharding-jdbc-example

SQL语句限制(将已有项目加入sharding进行分表最难的就是修改以前的SQL语句)

有限支持子查询

不支持包含冗余括号的SQL

不支持HAVING

不支持OR,UNION 和 UNION ALL

不支持特殊INSERT

每条INSERT语句只能插入一条数据,不支持VALUES后有多行数据的语句

不支持DISTINCT聚合

不支持dual虚拟表

不支持SELECT LAST_INSERT_ID()

不支持CASE WHEN

举例:
(1) sql中出现’where order_id=1 OR order_id=2’,运行时会报sharding的异常No support ‘OR’
(2) 关于冗余括号,如’…join … on a.id=b.id AND(1=1) where …’,这个AND(1=1)若放在where后面不会异常,但放在join on 后面就会出现以下异常:
io.shardingjdbc.core.parsing.parser.exception.SQLParsingException: SQL syntax error, expected token is ‘EQ’, actual token is ‘INT’, literals is ‘1’.

对sql的部分限制是全局的(如OR、CASE WHEN、冗余sql,部分子查询等),对于不分表的,要添加另外一个数据源。参考官方FAQ第八条:http://shardingjdbc.io/docs_cn/01-start/faq/。也可以参考我之前写过的文章:https://blog.csdn.net/baidu_36882394/article/details/106714573

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值