我可以通过JDBC连接运行“源”命令(SQL脚本)吗?

时间:2018-08-26 16:46:39

标签: java mysql jdbc

我正在编写一个具有数据访问层的应用程序,以抽象化到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;
}

有人可以建议如何做吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

let oneWeekAgoDate = NSCalendar.current.date(byAdding: .weekOfYear, value: -1, to: NSDate() as Date) fetchOptions.predicate = NSPredicate(format: "date > %@ && (mediaType = %d || mediaType = %d)",oneWeekAgoDate! as NSDate, PHAssetMediaType.image.rawValue, PHAssetMediaType.video.rawValue) 不是MySQL的SQL方言的一部分;这是一个MySQL Shell命令。尽管如此,您仍不需要编写自己的解析器。您可以使用SqlTool中所述的类似this answer的东西。