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