1. 程式人生 > >java程式碼執行.Sql指令碼檔案

java程式碼執行.Sql指令碼檔案

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(";");//定義分隔符

參考文章: