首页 > 数据库 >【YashanDB数据库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常

【YashanDB数据库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常

时间:2024-07-25 15:20:29浏览次数:15  
标签:jdbc java dbType druid merge sql YashanDB null 异常

问题现象

客户的java日志中有如下异常信息:

问题的风险及影响

对正常的业务流程无影响,但是影响druid的merge sql功能(此功能会将sql语句中的字面量替换为绑定变量,然后将替换以后的sql视为同一个,然后用做执行性能统计)

问题影响的版本

与yashandb版本无关

问题发生原因

druid源码中在merge sql时会调用ParameterizedOutputVisitorUtils.parameterize(sql, null, null, null, null);此方法的第二个参数为dbType,此时传入为null,解析时不识别递归查询中的start关键字,因而抛出异常。

解决方法及规避方式

由于此异常对正常的业务流程无影响,忽略此异常或者关闭merge sql功能即可(设置spring.datasource.druid.filter.stat.mergeSql=false)

问题分析和处理过程

spring+druid连接池初始化时,要指定dbtype属性(由参数spring.datasource.druid.dbType指定)。但是druid目前不支持yashan,此参数的值又不能写成oracle。如果写成oracle,启动时会有如下异常:

所以,spring.datasource.druid.dbType的值就要设置为空或者YaShanDB。

无论设置为哪种,druid在merge sql的时候,都会进入dbType=null的分支,此时ParameterizedOutputVisitorUtils.parameterize方法就会抛出token IDENTIFIER start异常。

而此方法在dbType=oracle的时候,可以正常解析,不会抛出异常。但是由于druid支持的原因,我们无法在jvm进程启动时通过配置达到如下效果。

经验总结

如下为一个可以直接运行的springboot + druid + yashandb demo:

druid_test.zip

标签:jdbc,java,dbType,druid,merge,sql,YashanDB,null,异常
From: https://www.cnblogs.com/YashanDB/p/18323207

相关文章

  • Java基础语法
    Java基础语法目录Java基础语法1.关键字和保留字关键字(Keywords)保留字(ReservedWords)2.标识符2.1.命名规则1.标识符的组成2.标识符的首字符3.标识符的命名限制4.命名风格5.其他建议6.示例2.2.驼峰命名法大驼峰命名法(UpperCamelCase)小驼峰命名法(lowerCamelCase)注意事项2.3.变......
  • Java8 函数式编程和Lambda
    lambda初识lambda表达式一个简单的方法,比较两个Integer:publicvoidTest1(){ Comparator<Integer>com=newComparator<Integer>(){ @Override publicintcompare(Integero1,Integero2){ returnInteger.compare(o1,o2); } }; TreeSet<Integer>......
  • JavaWeb Servlet
    Servlet入门Servlet是Java提供的一门动态web资源开发技术。简而言之,不同用户访问同样的资源会看到不一样的效果。Servlet是JavaEE规范之一,其实是一个接口。1快速入门1.1创建web项目,导入Servlet依赖坐标<dependency><groupId>javax.servlet</groupId>......
  • java之接口
    在java中,接口是一种用来定义程序的一种协议,它用来描述类或结构的一组相关行为。接口是由抽象类衍生的一个概念,并由此产生了一种编程方式。这种编程方式称为面向接口编程。面向接口编程就是将程序的不同业务逻辑相分离,以接口的形式对接不同的业务模块。在java中,使用接口的目......
  • JavaWeb项目中动态拼接sql语句
    业务需求描述:图中的查询框在分条件查询用户信息列表时,前端可能会传回一个条件或多个条件,此时要对不同的条件进行sql语句的不同书写,前端传的情况有很多种,所以如果分情况写sql语句会比较死,并且不够灵活,而且书写的内容会很多,所以要想一种办法来进行不同情况的sql语句拼接。参数......
  • Java CompletableFuture 异步超时实现探索
    简介JDK8中CompletableFuture没有超时中断任务的能力。现有做法强依赖任务自身的超时实现。本文提出一种异步超时实现方案,解决上述问题。前言JDK8是一次重大的版本升级,新增了非常多的特性,其中之一便是CompletableFuture。自此从JDK层面真正意义上的支持了基于事件的......
  • Java入门:05.Java中的数组002
    通过上篇文章,相信大家对数组应该有了一个简单的了解,并对Java中的数据类型有了一个基本的认识,不仅如此我们还明白了怎样定义一个数组类型的变量,在这之后,让我们一起来更加深入的了解一下数组吧。三、如何创建一个数组(对其初始化)上篇文章我们明白了怎样定义一个数组类型的变量,但......
  • java 注解
    内置注解注解作用描述@Override用于标记方法覆盖父类的方法@Deprecated标记已过时的方法或类,建议不再使用@SafeVarargs用于抑制参数安全性警告注解只能用于静态方法或final实例方法@FunctionalInterface标记接口为函数式接口只有一个抽象方法的接口......
  • java学习4
    我感觉我这一个月学下来就是在闭门造车,网上找的学习路线,以及一些学习建议,或者说抄项目去学习就好像自己在迷雾中探索一样看不清方向这周我和上周一样,打算通过从网上抄项目进行结构化学习。但实际上不过是把代码抄过来而已如果没有人去指导,没有人告诉我,这个代码为什么要这样写,什......
  • Java毕业设计:基于Springboot+vue的电影院管理系统
    【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享......