druid连接gbase8s数据库报错空指针

在使用druid 1.2.17以及之后版本中,在连接gbase8s数据库时报错空指针

java.lang.NullPointerException

at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1764)

at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:939)

at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1463)

at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1459)

at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:83)

原因在获取数据库类型(dbTypeName)时不支持gbase8s数据库,导致获取类型为null,然后在createPhysicalConnection 中构建数据库连接时直接使用dbTypeName.equals做判断,导致此处空指针,异常传递到上层最终报错空指针

复制代码
else if (dbTypeName.equals(DbType.sqlserver.name())) {

个人觉得这块代码处理的不太合适,如果要限制数据库类型可以有很多地方或者办法能处理,在前边获取到 dbTypeName =null 就应该给出日志结束调用,而不是在后边突兀的一个空指针异常

解决方案

1 在com.alibaba.druid.util.JdbcUtils的getDriverClassName方法中加入gbase8s支持

复制代码
else if (rawUrl.startsWith("jdbc:gbasedbt-sqli:")) {
            return "com.gbasedbt.jdbc.Driver";
        }

2 在com.alibaba.druid.util.JdbcUtils的getDbTypeRaw方法加入gbase8s支持

复制代码
else if (rawUrl.startsWith("jdbc:gbasedbt-sqli:") ) {
            return DbType.gbase8s;
        }

3 在com.alibaba.druid枚举类 DbType 中加入gbase8s支持

复制代码
gbase8s(0);
相关推荐
海市公约37 分钟前
MySQL更新语句执行全流程:从Buffer Pool修改到二阶段提交
数据库·mysql·binlog·innodb·undo log·二阶段提交·update执行原理
颂love1 小时前
MySQL的执行流程
android·数据库·mysql
程序leo源1 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
这个DBA有点耶2 小时前
COUNT进阶:超大表的近似计数与HyperLogLog
数据库·sql·程序人生·学习方法·dba·改行学it
武子康2 小时前
调查研究-138 全球机器人产业深度调研报告【01 篇】:市场规模、竞争格局与商业化成熟 2026
服务器·数据库·ai·chatgpt·机器人·具身智能
zhojiew2 小时前
在本地PostgreSQL使用pgvector构建生成式 AI 应用的实践
数据库·人工智能·postgresql
Yushan Bai2 小时前
EXADATA X5数据库一体机节点login: failure forking: Cannot allocate memory问题处理
数据库·oracle·vr
KaMeidebaby2 小时前
卡梅德生物技术快报|噬菌体肽库展示技术构建 Mhp168‑Hsp70 定向随机肽库:流程、质控与数据结果
前端·数据库·其他·百度·新浪微博
SelectDB3 小时前
Agent 时代,为什么传统的可观测方案不适用了?
大数据·数据库·数据分析
snowfoootball3 小时前
解决低版本navicat连接PostgreSQl的不兼容报错问题
数据库·postgresql