java—我可以从jdbc连接运行“source”命令(sql脚本)吗?

e0uiprwp  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(742)

我正在编写一个应用程序,它有一个数据访问层来抽象到sqlite3或mysql数据库的底层连接。
多亏了昨天这里的一些帮助,我学会了如何使用processbuilder运行命令行导入到sqlite3db中,使用输出重定向。
现在我正试图通过导入转储文件在mysql中创建相同的数据库。从命令行客户端加载可以正常工作。我只是告诉它源文件和数据库创建成功。
但是,我试图在运行时通过代码实现这一点,而我执行sql语句的方法无法执行源命令。
我怀疑这是因为“source”不是sql,但我不知道还可以使用什么来尝试和运行它。
我的错误消息是:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'source /tmp/ISMCoreActionPack_mysql.sql' at line 1

失败的命令字符串:

source /tmp/ISMCoreActionPack_mysql.sql;

我的方法是:

public Boolean executeSqlStatement(String sql)  {
    Boolean rc = false;
    try {
      Connection connection = getConnection();
      Statement statement = connection.createStatement();
      rc = statement.execute(sql);
      connection.close();
    } catch (SQLException e) {
      e.printStackTrace();
      System.err.println(e.getClass().getName() + ": " + e.getMessage());
      System.exit(1);
    }
    return rc;
}

有人能建议怎么做吗?

oalqel3c

oalqel3c1#

source 不是mysql的sql方言的一部分;这是一个mysql shell命令。不过,您不需要编写自己的解析器。您可以使用类似sqltool的工具,如本文所述。

jbose2ul

jbose2ul2#

您不能运行'source'命令,因为jdbc驱动程序不支持它,只支持mysql。
我给你的建议如下。编写一些解析器,从文件中读取查询,并使用jdbc语句执行它们。

相关问题