【问题标题】:Can I run a "source" command (SQL script) from a JDBC connection?我可以从 JDBC 连接运行“源”命令(SQL 脚本)吗?
【发布时间】:2018-08-26 16:46:38
【问题描述】:

我正在编写一个应用程序,它有一个数据访问层来抽象与 SQLITE3 或 MySQL 数据库的底层连接。

感谢昨天这里的一些帮助,向我展示了如何使用流程构建器通过输出重定向运行命令行导入到 SQLITE3 DB。

现在我正在尝试通过导入转储文件在 MySQL 中创建相同的数据库。从命令行客户端加载工作正常。我只是告诉它获取文件并成功创建数据库。

但是,我试图在运行时通过代码执行此操作,而我执行 SQL 语句的方法无法执行源命令。

我怀疑这是因为“源”不是 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;
}

谁能建议如何做到这一点?

【问题讨论】:

    标签: java mysql jdbc


    【解决方案1】:

    你不能运行'source'命令,因为它不受JDBC驱动支持,只有MySQL。

    我给你的建议如下。编写一些解析器,从文件中读取查询,并使用 JDBC 语句执行它们。

    【讨论】:

    • 是的,我想我可能不得不这样做。尽管从转储中加载似乎是一种非常明显的创建数据库的方法。为什么不把这个添加到驱动程序中?
    【解决方案2】:

    source 不是 MySQL 的 SQL 方言的一部分;它是一个 MySQL shell 命令。不过,您不需要编写自己的解析器。你可以使用SqlTool 之类的东西,如this answer 中所述。

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 1970-01-01
      • 2019-03-16
      • 2014-05-10
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多