# 达梦数据库 JDBC 执行 SQL 操作记录 > 日期:2026-06-10 > 数据库:达梦 DM8 (192.168.0.56:5236, schema: ZJRS_JEECG_BOOT) > 驱动:项目 Maven 本地仓库中的 DmJdbcDriver18 8.1.3.140 --- ## 一、背景 项目开发过程中需要直接在达梦数据库上执行建表、插入测试数据等 SQL,但当前机器未安装 `disql` 客户端。因此利用项目已有的 DmJdbcDriver18 JDBC 驱动,编写简单 Java 程序直连数据库执行 SQL。 ## 二、驱动路径 ``` ~/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar ``` Windows 绝对路径: ``` C:/Users/bowinuser/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar ``` ## 三、连接信息 ``` URL: jdbc:dm://192.168.0.56:5236?schema=ZJRS_JEECG_BOOT&compatibleMode=oracle&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 用户名: SYSDBA 密码: Bowin123456 ``` ## 四、编译与执行 ### 4.1 编译 ```bash cd "D:\我的文件\JeecgBoot-main" javac -encoding UTF-8 \ -cp "C:/Users/bowinuser/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar" \ .claude/DmRun.java -d .claude/ ``` **关键点:** 必须加 `-encoding UTF-8`,否则 Java 源文件中的中文字符会因 Windows 默认 GBK 编码导致编译失败("未映射字符"错误)。 ### 4.2 执行 ```bash java -cp ".claude;C:/Users/bowinuser/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar" \ DmRun ``` ## 五、核心代码模板 ```java import java.sql.*; public class DmRun { static String url = "jdbc:dm://192.168.0.56:5236?schema=ZJRS_JEECG_BOOT&compatibleMode=oracle&..."; static String user = "SYSDBA"; static String pw = "Bowin123456"; public static void main(String[] args) throws Exception { try (Connection c = DriverManager.getConnection(url, user, pw)) { c.setAutoCommit(false); Statement s = c.createStatement(); // 执行建表 s.execute("CREATE TABLE xxx (...)"); // 执行注释(DM8 特有语法) s.execute("COMMENT ON TABLE xxx IS '表说明'"); s.execute("COMMENT ON COLUMN xxx.col IS '列说明'"); // 执行索引 s.execute("CREATE UNIQUE INDEX idx_xxx ON xxx(col)"); // 插入数据(日期使用 TO_DATE) s.execute("INSERT INTO xxx VALUES (..., TO_DATE('2026-06-09','YYYY-MM-DD HH24:MI:SS'), ...)"); c.commit(); } } } ``` ## 六、踩坑记录 | 问题 | 原因 | 解决 | |------|------|------| | `ClassNotFoundException: dm.jdbc.driver.DmDriver` | classpath 中 JAR 路径不对 | 使用绝对路径 `C:/Users/.../DmJdbcDriver18-8.1.3.140.jar` | | 编译报"未映射字符" | Java 源文件含中文但 javac 默认用 GBK | 加 `-encoding UTF-8` | | 从 SQL 文件读取执行时 COMMENT ON 失败 | 文件编码/语句拆分不准确 | 直接在 Java 代码中拼接 SQL 字符串执行 | | `CURRENT_TIMESTAMP` 等关键字大小写 | DM8 Oracle 兼容模式下关键字不区分大小写 | 直接使用 | | 日期插入 | 字符串不能直接转为 TIMESTAMP | 使用 `TO_DATE('2026-06-09 10:00:00','YYYY-MM-DD HH24:MI:SS')` | ## 七、验证数据 ```java // DmCheck.java - 检查表是否存在及行数 try (Connection c = DriverManager.getConnection(url, user, pw)) { for (String t : new String[]{"ENTERPRISE_STATUS_LOCAL", "PERSONAL_STATUS_LOCAL", ...}) { ResultSet rs = c.createStatement().executeQuery("SELECT COUNT(*) FROM " + t); rs.next(); System.out.println(t + ": " + rs.getInt(1) + " rows"); } } ``` ## 八、便捷执行清单 后续如需执行新的 SQL,按以下步骤操作: ```bash # 1. 编写/修改 .claude/DmRun.java # 2. 编译 cd "D:\我的文件\JeecgBoot-main" javac -encoding UTF-8 -cp "C:/Users/bowinuser/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar" .claude/DmRun.java -d .claude/ # 3. 执行 java -cp ".claude;C:/Users/bowinuser/.m2/repository/com/dameng/DmJdbcDriver18/8.1.3.140/DmJdbcDriver18-8.1.3.140.jar" DmRun ```