打开DataGrip想直接连达梦数据库,结果发现数据源列表里翻了一圈都没有达梦这个选项?别怀疑自己,DataGrip默认确实不内置达梦(DM)数据库驱动,但这不代表它连不上。我最近帮一个项目组配了DataGrip连达梦的开发环境,把驱动下载、驱动模板配置、URL写法、schema切换、SQL方言告警这些坑基本都踩了一遍,整理成这篇实操记录,给正准备用DataGrip连达梦的同行省点时间。
这篇文章适合以下人群参考:公司数据库从Oracle或MySQL迁移到达梦、但开发工具还是想继续用DataGrip的;用DBeaver或Navicat连达梦不爽,想试试JetBrains这套补全和版本管理能力的;以及刚装了达梦8、想在本地用可视化工具连库做日常开发的同学。下文以达梦8 + DataGrip 2024版为主,其它版本思路完全一致。
1. 为什么DataGrip连达梦会这么麻烦
1.1 数据源列表里没有达梦,不代表不能连
DataGrip的数据源支持分两层:第一层是JetBrains官方原生支持,内置于工具的数据库列表里,比如MySQL、PostgreSQL、Oracle、SQL Server;第二层是手动注册驱动模板,通过添加第三方JDBC驱动来连接不在官方列表里的数据库。
达梦就属于第二层。国产数据库在JetBrains的官方矩阵里覆盖得比较晚,早期一直没做内置支持,所以最稳妥的做法就是把它当“自定义数据源”来处理。本质上,JDBC连接只需要四样东西:驱动jar包、驱动类名、URL格式、账号密码。只要达梦提供了标准JDBC驱动,DataGrip就一定能连。
很多人卡住是因为习惯在“Data Source”里直接找达梦,找不到就以为不支持,其实入口应该在“Drivers”选项卡里先把驱动注册出来,再回去新建数据源就能看到了。这个使用习惯的差异,是“明明能连却不知道在哪配置”的最大原因。
1.2 达梦JDBC驱动去哪找
连接达梦的第一步是拿到JDBC驱动包,文件名通常是DmJdbcDriver18.jar。获取渠道有两个:
- 达梦官网下载开发版资料包,解压后进入
drivers/jdbc目录,里面就有各个JDK版本对应的驱动jar。 - 如果本机已经装了达梦数据库,直接去安装目录里找,路径一般是
$DM_HOME/drivers/jdbc,例如/dmdbms/drivers/jdbc/DmJdbcDriver18.jar。这是最快的方式,不需要额外下载。
还要注意,达梦驱动包有多个版本,命名后面的数字对应JDK版本:DmJdbcDriver16对应JDK1.6,DmJdbcDriver17对应JDK1.7,DmJdbcDriver18对应JDK1.8及以上。我建议一律用DmJdbcDriver18.jar,因为DataGrip自带的是JetBrains Runtime(底层是较新的JDK),用老驱动容易报UnsupportedClassVersionError。
1.3 配置前先确认这三件事
在动手之前,先花一分钟确认环境,省得后面排查半天:
- 达梦数据库服务是否正常启动。Windows服务管理器里看
DmService开头的服务,Linux下执行systemctl status DmServiceDMSERVER。 - 达梦的端口号。默认是5236,如果改过,去安装目录的
dm.ini里搜PORT_NUM。这一步很关键,因为不是所有达梦实例都跑在默认端口上,我遇到过好几个客户把端口改成别的,DataGrip连不上还以为是驱动问题。 - 是否可达。命令行执行
telnet 数据库IP 5236,或者用DataGrip自带的网络检测工具测一下端口。
这三项都没问题,再进下一步,否则后面报的错会让你误判方向。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. DataGrip手工配置达梦驱动的完整操作
2.1 第一步:新建驱动模板
打开DataGrip,按Ctrl+Alt+S进入设置(macOS是Cmd+,),在左侧导航找到Database -> Drivers。这是驱动管理入口,不是数据源列表,很多人会搞混。
点击左上角+号新建驱动模板,命名可以写DM8。然后在右侧面板最下方的Driver Files区域,点+号选择刚拿到的DmJdbcDriver18.jar。添加成功后,DataGrip会自动解析jar包里的驱动类,“Driver”下拉框里会出现dm.jdbc.driver.DmDriver,如果没自动出现,手动选择或输入这个类名。
这里有一个容易踩的坑:建完驱动模板后,Driver Files列表下方有“Options”或“Dialects”之类的高级设置,不需要你去勾选任何东西,保持默认就行。方言问题我后面有专门章节讲,现在改反而会引入新问题。
驱动模板建好后,点右下角OK保存。这个时候新驱动就注册进DataGrip了,下一步建数据源时才能找到它。
2.2 第二步:建立数据源并配置URL参数
回到主界面,左侧Database工具窗口,点击+号 → Data Source,翻到最底部,找到DM8(就是你刚注册的自定义驱动)。
此时需要填三部分:
- URL:
jdbc:dm://127.0.0.1:5236 - User:达梦账号,默认通常为
SYSDBA - Password:对应密码
如果达梦实例开启了指定schema需求,可以在URL后面加参数?schema=你的模式名,例如jdbc:dm://127.0.0.1:5236?schema=TEST。注意这里用的是问号拼接参数,不要用分号,和Oracle那种@service写法完全不同,因为达梦的JDBC驱动走的是它自己的URL协议。
填完之后先别急着测试,建议顺手把Database输入框也填上,不填的话DataGrip会连上实例但展示不了具体的库和模式列表,别问我怎么知道的,实测不填就会多花五分钟在权限排查上。
2.3 第三步:测试连接与选择Schema
点Test Connection,正常情况下会提示连接成功。如果报错,不要慌,去第4章的排查表里对照找原因,绝大多数情况是驱动类没选对或端口不通。
连接成功后,点“Schemas”选项卡,勾选你实际要用到的模式。达梦的逻辑和Oracle类似:一个实例下面有多个模式(schema),每个模式里有各自的表、视图、存储过程。如果你在达梦自带的管理工具里能看到表,但DataGrip里看不到,99%是这里没勾选对应模式。
比如你用SYSDBA登录,默认看到的是SYSDBA这个模式下的对象,但业务表可能建在TEST模式里。这时候需要在Schemas选项卡里把TEST勾上,再刷新连接,表才会出现在左侧树里。
2.4 连接成功后的基础验证
连接好后,我建议做一个快速验证:双击左侧某个模式展开,确认表、视图能正常列出;然后右键表名选择Jump to Query Console,执行一条简单的SELECT COUNT(*) FROM 表名,确认能跑通。
这一步看起来简单,但能一次性验证三件事:驱动配置正确、schema选择正确、SQL执行引擎正常。如果查询能跑通,说明DataGrip连达梦这一整套链路已经OK,后面就是使用习惯和性能优化的问题。
验证时还可以顺便试一下DataGrip的自动补全。如果补全弹不出表名和列名,不用太担心,这属于方言识别问题,我在下一章给解法。
3. 连接成功之后的高频问题与专项调优
3.1 编辑器的红色波浪线:SQL方言识别
DataGrip连上达梦、表也能查,但打开SQL编辑器写查询的时候,满屏红色波浪线,unable to resolve column、unable to resolve table这种提示满天飞;甚至有时候表名明明是存在的,写进SQL里还是不认。
原因是DataGrip把达梦识别为“未知方言”,它的SQL解析器拿Oracle或者MySQL的语法规则去套达梦,自然会出现大量“不认识”的报错。这属于DataGrip对非官方支持数据库的通病,不影响实际执行,但看着很烦,而且会干扰真实语法错误的识别。
我的处理办法分两步:
第一步,在数据源的Options选项卡里,把Dialect(方言)设置成Oracle。达梦对Oracle语法兼容性做得最好,很多项目也本来就是从Oracle迁过去的,设置成Oracle后,大部分函数、分页写法和类型都能被正确识别。如果你的项目是从MySQL迁过来的,可以试试MySQL方言,哪个报错少就用哪个。
第二步,在Settings -> Editor -> Inspections -> SQL里,把Unresolved reference、Unresolved operator这类检查级别从Error调低为Warning,或者直接关闭。这样既保留基本的语法校验,又不会被一堆误报的红色波浪线干扰注意力。
3.2 表名和列名的大小写问题
达梦默认的标识符处理方式偏向Oracle:不带引号建的表和列,会自动转成大写存储。这意味着,你在达梦管理工具里看到表名是小写,不代表它存储时就是小写;如果建表时用了双引号包裹,才会严格保留大小写。
这个特性带来的直接后果是:在DataGrip里写SQL时,用select * from test_user可能报表不存在,因为实际表名是大写TEST_USER。解决方式就是要么全用大写写表名,要么在SQL里用双引号精确匹配大小写。
更省心的做法是,把DataGrip的自动补全和自动格式化都调成首选项一致:打开Settings -> Editor -> Code Style -> SQL,在Case选项里把Keywords、Identifiers都设为Upper case。这样自动生成的SQL就统一用大写,完美避开大小写不匹配问题。这个细节在达梦这种大小写敏感的国产库里特别重要,我在MySQL上从不在意,到达梦上就踩了两次。
3.3 把达梦接进Spring Boot项目
如果只是用DataGrip做开发,那配置到上一节就够了。但很多场景是项目代码也要连达梦,这里顺便把后端接入方式也说明白,因为DataGrip里验证好的SQL,最后总要到项目里去执行。
达梦驱动在Maven中央仓库里的坐标不固定,有些版本能拉到,有些版本拉不到。线上环境我一般不建议赌中央仓库的可用性,而是手动把jar装进本地Maven仓库,命令如下:
bash复制mvn install:install-file -Dfile=DmJdbcDriver18.jar -DgroupId=com.dameng -DartifactId=DmJdbcDriver18 -Dversion=8.1.2.192 -Dpackaging=jar
然后在pom.xml里加依赖:
xml复制<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.2.192</version>
</dependency>
Spring Boot的application.yml配置如下:
yaml复制spring:
datasource:
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://192.168.1.100:5236?schema=TEST
username: SYSDBA
password: SYSDBA
这里的要点是:驱动类名是dm.jdbc.driver.DmDriver,不是com.dameng.DmDriver,也不是dm.jdbc.driver.DmJdbcDriver。我见过不少人把类名写错,启动时报ClassNotFound。URL里的?schema=TEST要不要加,取决于你业务表所在的模式是不是默认账号的模式,如果默认登录模式不对,就加上。
ORM框架方面,MyBatis几乎没有额外适配成本,直接写SQL就行。如果用的是Hibernate,需要把dialect设为org.hibernate.dialect.OracleDialect或达梦对应的兼容方言,否则建表、分页可能会生成不兼容的SQL。
3.4 DDL对比与数据导入导出的边界
有小伙伴问过我,DataGrip里能不能像连MySQL那样,直接右键表名做结构同步、数据导出?答案是:能做,但边界要清楚。
DataGrip的Database -> Compare and Migrate功能在达梦上能用,但生成的DDL脚本偶尔会有类型差异。达梦兼容Oracle语法,可Oracle里某些写法到达梦不是100%一致,尤其是在字段类型长度、默认值、分区语法这些地方。所以我现在的做法是:DataGrip只做差异查看,真正执行DDL还是在达梦管理工具里执行,或者用达梦自带的DTS工具导结构。
数据导出方面,DataGrip的Export Data可以把查询结果导出为INSERT语句、CSV、JSON等格式,日常小批量数据迁移完全够了。但如果是整库导出备份,还是用达梦自带的dexp/dimp命令,或者达梦管理工具里的备份功能,DataGrip不替换掉这条链路。
关于热搜里提到的“达梦开启CDC”,DataGrip本身不负责这件事。CDC能力依赖达梦数据库侧开启归档日志和相关配置,DataGrip最多只负责读取已有数据。如果你需要做数据集成或实时同步,建议直接查达梦官方文档里的DBMS_LOGMNR或CDC相关章节,不要在客户端工具里去想办法。
4. 实操中遇到的坑与排查方法速查
4.1 驱动加载类的“No suitable driver”错误
最常见的报错就是No suitable driver found for jdbc:dm://...,这个错误很多人第一时间怀疑URL写错,其实最常见的原因是驱动jar没有被DataGrip加载,或者Driver下拉框选错了类。
排查顺序我建议是:
- 打开
Settings -> Database -> Drivers -> DM8,点击Driver Files里的jar包,确认下方解析出的类列表里有dm.jdbc.driver.DmDriver。 - 如果没有,说明jar包损坏或者版本不对。
- 如果jar包正常但Driver下拉框没自动出现类名,手动输入完整类名
dm.jdbc.driver.DmDriver。 - 确认数据源的URL前缀必须是
jdbc:dm://,与驱动类的URL协议一致。
如果以上都对了,还报这个错,把DataGrip重启一下。JetBrains系列的工具在动态添加驱动文件后,偶尔不在当前会话里刷新生效,重启能解决一类很玄学的问题。
4.2 Connection refused:先查端口再查服务
Connection refused比驱动问题好定位,但要注意一点:达梦的默认端口不一定真的是5236。我遇到过一个客户,安装时把端口改成了1526,然后在DataGrip里一直连不上,以为是防火墙问题,折腾半天。
正确的排查姿势是:
- 用
telnet 地址 端口测连通性,快速判断是网络层还是服务层问题。 - 在达梦服务器本机执行
netstat -ano | grep 端口,看端口是否在监听。 - 如果本机能连、远程不行,优先检查防火墙规则,Linux下
firewall-cmd或iptables相关规则,Windows下检查入站规则。
另外,如果达梦服务根本没启动,也会报Connection refused。Linux下执行systemctl status DmServiceDMSERVER看一下,Windows下看服务管理器。这一串排查下来,基本能定位所有网络类问题。
4.3 UnsupportedClassVersionError:驱动和JDK不匹配
这个报错我一开始还愣了一下,后来看堆栈里写的UnsupportedClassVersionError才反应过来是驱动版本问题。DataGrip自带的是JDK 17+运行时,而老的DmJdbcDriver17.jar或DmJdbcDriver16.jar编译目标版本比较低,在运行时不会报错,但问题的反向版本,也就是用老驱动连新的Java环境,一样可能存在兼容问题。
推荐解决办法只有一个:把驱动替换成DmJdbcDriver18.jar。这个版本兼容JDK1.8及以上,DataGrip用的比较新的JDK也没问题。
顺带说一句,Spring Boot项目如果用的是JDK17,同样建议用DmJdbcDriver18.jar,不要用旧驱动,否则项目启动时会在加载驱动阶段偶发异常。
4.4 其它工具的横向对比
日常开发里,连接达梦的工具其实不少,我简单说说自己用下来的感受,还是那句话,没有绝对的最好,只有最匹配场景的。
| 工具 | 配置难度 | 补全体验 | 适合场景 |
|---|---|---|---|
| DataGrip | 需要手动建驱动模板,一次配置终身使用 | 设置好方言后补全很舒服 | 重度依赖SQL编辑体验、需要版本管理功能 |
| DBeaver | 也需要手动找drivers,操作类似 | 补全一般,但稳定性尚可 | 免费工具首选,多数据库统一管理 |
| Navicat for DM | 官方版本直接支持达梦,开箱即用 | 直观易用 | 企业内部采购了授权、习惯Navicat的团队 |
| 达梦自带Manager | 完全原生支持 | 功能最全,界面老旧 | 数据库管理员做运维操作 |
如果是个人开发者在纠结免费工具,DBeaver和DataGrip其实都能连达梦,DataGrip的补全和代码功能确实更强,缺点是不是免费商业软件。能用DataGrip的,我建议好好配一次驱动模板,之后所有达梦连接都能复用这一套。
对于“DataGrip有免费版吗”这类问题,简单讲:JetBrains系付费订阅在开源项目、学生和教师身份下有免费授权,社区里也常提到的激活途径我就不展开了,合规搭配才能用得踏实。相比到处找激活码,我更推荐用DataGrip的Linux版配一套自己写的脚本,或者用官方提供的免费试用期来评估是否值得采购。
结束语
从第一次手动给DataGrip配达梦驱动到现在,我最大的体会是:这类“官方没做内置支持”的数据库,只要JDBC驱动是完整的,适配起来基本就是“填参数”的活,真正的麻烦全在细节上——比如schema没选对导致看不到表、方言没设置导致满屏红波浪线、驱动类名选错导致No suitable driver,每一步单独看都不难,串起来就能耗掉半天时间。
最后再分享一个小技巧:把配置好的驱动模板和数据源信息,通过DataGrip的Settings Repository和团队同步,或者直接把驱动模板导出成压缩包,发给同事导入,这样整个团队就不用每个人重复踩一遍驱动配置的坑了。我在项目里就是这么做的,后端几个同事拿到手就能直接连达梦,省下了不少对接时间。
