注册

如何使用Java进行执行SQL脚本一次性完成模式的创建、表的创建及初始化数据的导入?

DM_933650 2024/05/17 568 5

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
DM Database Server 6 4 V8
DB Version: 0x7000c
03134284094-20231011-204277-20067
【操作系统】:Kylin Linux Advanced Server V10 (Lance)
【CPU】:x6 4
【问题描述】*:我需要实现一个需求,允许用户传入数据库配置,系统使用配置进行数据库的初始化,行为包括模式的创建、表的创建及初始化数据的导入。使用了依靠达梦迁移工具从mysql迁移到dm再从dm迁移到sql文件的SQL脚本,使用如下Java代码运行SQL脚本时发生错误

try (Connection connection = DriverManager.getConnection(url, properties)) { Statement statement = connection.createStatement(); statement.execute(IoUtil.readUtf8(this.getClass().getClassLoader().getResourceAsStream(dataSourceType.getInitSql()))); }

错误:

dm.jdbc.driver.DMException: 第 2 行, 第 8 列[SCHEMA]附近出现错误: 
语法分析出错
	at dm.jdbc.driver.DBError.throwException(DBError.java:711)
	at dm.jdbc.a.b.o.x(MSG.java:591)
	at dm.jdbc.a.b.o.C(MSG.java:526)
	at dm.jdbc.a.b.o.B(MSG.java:507)
	at dm.jdbc.a.a.a(DBAccess.java:245)
	at dm.jdbc.a.a.a(DBAccess.java:729)
	at dm.jdbc.driver.DmdbStatement.executeInner(DmdbStatement.java:730)
	at dm.jdbc.driver.DmdbStatement.do_execute(DmdbStatement.java:190)
	at dm.jdbc.driver.DmdbStatement.do_execute(DmdbStatement.java:182)
	at dm.jdbc.driver.DmdbStatement.execute(DmdbStatement.java:1294)

如图,脚本一二行均为创建模式命令
image.png
移除第二行后重新尝试报出以下错

dm.jdbc.driver.DMException: 第 354 行, 第 1 列[INSERT]附近出现错误: 
语法分析出错
	at dm.jdbc.driver.DBError.throwException(DBError.java:711)
	at dm.jdbc.a.b.o.x(MSG.java:591)
	at dm.jdbc.a.b.o.C(MSG.java:526)
	at dm.jdbc.a.b.o.B(MSG.java:507)
	at dm.jdbc.a.a.a(DBAccess.java:245)
	at dm.jdbc.a.a.a(DBAccess.java:729)
	at dm.jdbc.driver.DmdbStatement.executeInner(DmdbStatement.java:730)
	at dm.jdbc.driver.DmdbStatement.do_execute(DmdbStatement.java:190)
	at dm.jdbc.driver.DmdbStatement.do_execute(DmdbStatement.java:182)
	at dm.jdbc.driver.DmdbStatement.execute(DmdbStatement.java:1294)

创建一个模式和若干表后,执行插入的命令导致了报错
image.png

整个SQL脚本复制粘贴到DM管理工具中执行是没有问题的,当数据库为MySQL时,statement.execute可以正常运行包含多种类型SQL语句的脚本,所以问题出在达梦数据库上。

请问如何修改代码,或者说有什么其他方式能够在Java中导入整个SQL脚本?

回答 0
暂无回答
扫一扫
联系客服