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);
相关推荐
TPCloud3 分钟前
部署自动清理任务解决ORA-00257: archiver error. Connect internal only, until freed
数据库·oracle·ora-00257
猿月亮3 小时前
MySQL自启动失败(MySQL不能开机自启)解决方案_MySQL开机自启疑难杂症解决,适用Win11/Win10
数据库·mysql
酷炫码神3 小时前
MySQL查询
数据库·mysql
大明湖的狗凯.3 小时前
MySQL 中的排序:索引排序与文件排序
数据库·mysql·oracle
XMYX-03 小时前
深入解析 Django 中数据删除的最佳实践:以动态管理镜像版本为例
数据库·django·sqlite
Lostgreen3 小时前
SQL on Hadoop
数据库·hadoop·笔记·分布式·sql·学习
Karoku0664 小时前
【docker集群应用】Docker常用命令
运维·数据库·docker·容器
小小宇宙中微子4 小时前
MySQL INSERT CRTATE DELETE DORP UPDATE WHERE 的用法
数据库·mysql
swiftlzk4 小时前
redmi 12c 刷机
android·数据库
人才程序员5 小时前
详解Qt 中使用虚拟键盘(软键盘qtvirtualkeyboard)
开发语言·数据库·c++·qt·计算机外设·界面·c语音