当前使用版本(必填,否则不予处理)
3.4.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
MyBatis-Plus 不支持 ClickHouse Update 和 Delete 语句
clickHouse
删除数据
alter table ts.aa
delete
where id in (select id from ts.bb b where id = 2)
修改数据 alter table ts.aa update store = 'asad' where id in (select id from ts.bb b where id = 1)
重现步骤(如果有就写完整)
保存或删除操作
报错信息
{ "code": 420, "data": null, "message": "\n### Error updating database. Cause: ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 62, host: 192.168.3.113, port: 8123; Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 1 ('UPDATE') (line 1, col 1): UPDATE t_sys_role SET role_name='管理员',\nrole_code='ADMIN',\nremark='',\n\n\n\nlast_modifier='demo',\nlast_modify_time='2021-01-12 09:53:52' WHERE id=1348614778. }
Comment From: miemieYaho
看文档自己注入sql
Comment From: baojingyu
谢谢@miemieYaho 按照提示,我使用 SQL 注入器+MyBatis 拦截器,实现了 ClickHouse 数据库支持 UPDATE 和 DELETE 及OPTIMIZE 语法。
Comment From: wu9007
@baojingyu 你好,可以帮我看看下面这个问题吗 我注入了sql,控制台打印出来的语句这样的但还是报错:
Preparing:
ALTER TABLE sys_applet_trace
UPDATE user_id=? , applet_code=? , calculate_date=? , hour=? , visit_times=?
WHERE (applet_code = ? AND calculate_date = ? AND hour = ? AND user_id = ?)
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.sql.SQLException: sql injection violation, dbType clickhouse, , druid-version 1.2.5, syntax error: Invalid from clause : user_id = ? : ALTER TABLE sys_applet_trace UPDATE
user_id=? ,
applet_code=? ,
calculate_date=? ,
hour=? ,
visit_times=?
WHERE (applet_code = ? AND calculate_date = ? AND hour = ? AND user_id = ?)
### The error may exist in com/shinow/brick/donoranalyst/appletmonitor/applettrace/AppletTraceDao.java (best guess)
### The error may involve com.shinow.brick.donoranalyst.appletmonitor.applettrace.AppletTraceDao.updateClickhouseRow
### The error occurred while executing an update
### SQL: ALTER TABLE sys_applet_trace UPDATE user_id=? , applet_code=? , calculate_date=? , hour=? , visit_times=? WHERE (applet_code = ? AND calculate_date = ? AND hour = ? AND user_id = ?)
### Cause: java.sql.SQLException: sql injection violation, dbType clickhouse, , druid-version 1.2.5, syntax error: Invalid from clause : user_id = ? : ALTER TABLE sys_applet_trace UPDATE
user_id=? ,
applet_code=? ,
calculate_date=? ,
hour=? ,
visit_times=?
WHERE (applet_code = ? AND calculate_date = ? AND hour = ? AND user_id = ?)
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:199)
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 org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)
at com.sun.proxy.$Proxy121.update(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:287)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:65)
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.$Proxy126.updateClickhouseRow(Unknown Source)
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 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at com.baomidou.dynamic.datasource.aop.DynamicDataSourceAnnotationInterceptor.invoke(DynamicDataSourceAnnotationInterceptor.java:51)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at com.sun.proxy.$Proxy127.updateClickhouseRow(Unknown Source)
at com.shinow.brick.donoranalyst.clickhouse.UpdateTests.update(UpdateTests.java:36)
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 org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at