开发者社区> 问答> 正文

kingbase8 驱动找不到

希望数据库驱动支持配置。 com.alibaba.druid.util.JdbcUtils.getDriverClassName()方法中将驱动获取写死了,无法支持扩展,导致现在kingbase8驱动无法正常使用。

原提问者GitHub用户MrJiao

展开
收起
山海行 2023-07-05 19:34:52 231 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    你提到的com.alibaba.druid.util.JdbcUtils.getDriverClassName()方法中将驱动类 hardcode 成具体的数据库驱动类,无法支持自定义或第三方驱动,导致Kingbase等数据库驱动无法使用。

    这是一个限制,因为Druid目前主要针对主流数据库提供优化,没有考虑到所有可能的数据库驱动。

    但是,有以下几种方式可以实现连接Kingbase数据库:

    1.自定义Druid数据源类

    1. 覆盖Druid的PropertyBean支持
    2. 反射设置驱动类
    3. 直接修改源码
    4. 直接修改 DruidDataSource类和JdbcUtils类,去掉 hardcode,支持配置驱动类。

    在这几种方式中,自定义数据源类方式最为简单通用。

    只需基于DruidDataSource自定义一个KingbaseDataSource,指定Kingbase驱动类即可。

    2023-07-30 16:17:10
    赞同 展开评论 打赏
  • 对于Druid的数据库驱动获取,确实在com.alibaba.druid.util.JdbcUtils.getDriverClassName()方法中使用了硬编码的方式获取驱动类名,无法支持灵活的扩展。

    2023-07-11 09:36:25
    赞同 展开评论 打赏
  • 设置错误,导致进入默认驱动查找环节

    原回答者GitHub用户MrJiao

    2023-07-06 11:01:55
    赞同 展开评论 打赏
  • 要支持配置数据库驱动,请按照以下步骤进行:

    1. 导入com.alibaba.druid.util.JdbcUtils类以修改代码。
    2. 打开com.alibaba.druid.util.JdbcUtils类,在getDriverClassName()方法中查找以下代码行:
    if (url.startsWith("jdbc:mysql:")) {
        return "com.mysql.jdbc.Driver";
    } else if (url.startsWith("jdbc:oracle:")) {
        return "oracle.jdbc.driver.OracleDriver";
    }
    // 其他数据库的驱动类判断逻辑...
    
    1. 在该代码段下方添加以下代码来支持Kingbase8驱动(假设Kingbase8的URL是以jdbc:kingbase8:开头):
    else if (url.startsWith("jdbc:kingbase8:")) {
        return "org.postgresql.Driver"; // 或者您可以使用真正的Kingbase8驱动程序类名
    }
    
    1. 保存并重新编译com.alibaba.druid.util.JdbcUtils类。

    通过这样的修改,你现在应该能够在Druid中使用Kingbase8驱动了。请确保在将来升级Druid时备份并恢复这些更改,以免被覆盖。

    2023-07-05 19:54:08
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载