小编典典

通过Java执行.sql文件

sql

我有一个sql脚本文件,我需要通过java执行其中的命令。我在互联网上搜索了相同的内容,得到了一些定义解析器的代码以拆分SQL语句并执行该代码。但是它们都不适合我的sql脚本文件。因为我的脚本文件同时包含create语句和alter语句,但不带分号[相反,它具有GO]有人可以建议一种执行脚本文件的解决方案吗?谢谢,Mahesh


阅读 208

收藏
2021-04-19

共1个答案

小编典典

对于简单的脚本,我通常使用ibatis-
ScriptRunner中的此类。另外,您可以从Java生成一个新的数据库客户端进程,并输入您不想执行的脚本。例如,当更改sql文件中的定界符时,像ScriptRunner这样的简单解决方案就无法很好地工作,这将适用于所有脚本。

这是一个示例,该示例如何将sql作为字符串提供给Spawed db客户端进程:

private void runSql(String pSql) {
        String tCommand = "mysql -u " + username + (password != null ? " -p" + password : "") + " " + dbName;
        System.out.println(tCommand);

        try {
            Process tProcess = Runtime.getRuntime().exec(tCommand);
            OutputStream tOutputStream = tProcess.getOutputStream();
            Writer w = new OutputStreamWriter(tOutputStream);
            System.out.println(pSql);
            w.write(pSql);
            w.flush();

            Scanner in = new Scanner(tProcess.getErrorStream());

            String errorMessage = "";

            while (in.hasNext()) {
                errorMessage += in.next() + " ";
            }

            if (errorMessage.length() > 0) {
                System.out.println(errorMessage);
                throw new ClientSqlExecutionException(errorMessage);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
2021-04-19