java程式碼執行.Sql指令碼檔案
阿新 • • 發佈:2019-01-23
java 執行sql指令碼有3種方式 (ant、ibatis、ScriptRunner)
一、Ant 提供了 SQLExec 元件可以支援SQL檔案的執行,測試後效果不錯。
sqlExec 線上API:
package xxx; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.SQLExec; import org.apache.tools.ant.taskdefs.SQLExec.DelimiterType; import org.apache.tools.ant.types.EnumeratedAttribute; //需要引入ant的jar包 public String getConnection(String url,String user,String password,String filePath) { SQLExec sqlExec; try { sqlExec = new SQLExec(); //設定資料庫引數 sqlExec.setDriver("com.microsoft.sqlserver.jdbc.SQLServerDriver"); sqlExec.setUrl(url); //資料庫連線地址 sqlExec.setUserid(user); //使用者名稱 sqlExec.setPassword(password); //密碼 sqlExec.setEncoding("UTF8"); //要執行的指令碼 sqlExec.setSrc(new File(filePath)); //定義定界符:“;” DelimiterType dt = new DelimiterType(); dt.setValue("row");//對於行,只有包含分隔符的一行才被識別為命令的結束 sqlExec.setDelimiterType(dt); sqlExec.setDelimiter(";");//定義分隔符 //有出錯的語句該如何處理,abort:終止 sqlExec.setOnerror((SQLExec.OnError)(EnumeratedAttribute.getInstance(SQLExec.OnError.class, "abort"))); sqlExec.setPrint(true); //設定是否輸出 sqlExec.setProject(new Project()); // 要指定這個屬性,不然會出錯 sqlExec.execute(); return "success"; } catch (Exception e) { e.printStackTrace(); return "fail"; } }
遇到問題:
1. 腳本里的語句換行,導致java程式碼不能將其識別為一行導致報錯,解決辦法:
//新增如下程式碼,為java程式碼設定解析格式
DelimiterType dt = new DelimiterType();
dt.setValue("row");//對於行,只有包含分隔符的一行才被識別為命令的結束
sqlExec.setDelimiterType(dt);
sqlExec.setDelimiter(";");//定義分隔符
參考文章: