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);
相关推荐
阿里云大数据AI技术1 小时前
云栖实录|MaxCompute全新升级:AI时代的原生数据仓库
大数据·数据库·云原生
不剪发的Tony老师2 小时前
Valentina Studio:一款跨平台的数据库管理工具
数据库·sql
weixin_307779132 小时前
在 Microsoft Azure 上部署 ClickHouse 数据仓库:托管服务与自行部署的全面指南
开发语言·数据库·数据仓库·云计算·azure
六元七角八分2 小时前
pom.xml
xml·数据库
虚行2 小时前
Mysql 数据同步中间件 对比
数据库·mysql·中间件
奥尔特星云大使2 小时前
mysql读写分离中间件Atlas安装部署及使用
数据库·mysql·中间件·读写分离·atlas
牛马baby3 小时前
【mysql】in 用到索引了吗?
数据库·mysql·in
杀气丶3 小时前
L2JBR - 修复数据库编码为UTF8
数据库·sql·oracle
-Xie-3 小时前
Mysql杂志(三十)——索引失效情况
数据库·mysql
为java加瓦3 小时前
Lombok @Data 注解在 Spring Boot 项目中的深度应用与实践指南
java·开发语言·数据库