1. 程式人生 > 資料庫 >java執行sql指令碼

java執行sql指令碼

java執行sql指令碼

使用工具:ibatis(目前以整合在MyBatis3.0.1或更高版本中部分3.x.x版本已移除ibatis,本文使用MyBatis3.0.1MyBatis2.5.x同樣整合ibatis,但無法使用

支援JDK版本:1.5及以上

import org.apache.ibatis.jdbc.ScriptRunner;

	//執行mysql資料庫指令碼示例
	@Test
	public void mulitSqlForIbatisOnMySql() {
		try {
			//執行日誌檔案配置
			BufferedWriter log = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("src/account/mysql/log.txt")), "UTF-8"));
			//執行sql語句報錯時檔案配置
			BufferedWriter error = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("src/account/mysql/error.txt")), "UTF-8"));
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			//獲取資料來源
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&reConnect=true;","root", "19821982");
			
			//建立指令碼執行物件
			ScriptRunner r = new ScriptRunner(conn);
			//設定日誌輸出流,將執行日誌儲存至流中,每次將會覆寫
			r.setErrorLogWriter(new PrintWriter(error));
			//設定錯誤資訊輸出,將錯誤日誌儲存至流中,每次將會覆寫,如果sql指令碼無錯誤執行成功,則該檔案內容為空
			r.setLogWriter(new PrintWriter(log));
			//執行sql指令碼,預設位置為classpath,也就是與src資料夾同級
			r.runScript(new BufferedReader(new InputStreamReader(new FileInputStream(new File("src/account/newAccount_mysql.sql")), "UTF-8")));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(null != conn)
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			
			if(null != log)
				try {
					log.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			
			if(null != error)
				try {
					error.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
	}

注意:在sql指令碼中,每條語句使用",“分割,否則將引發異常;一般使用資料庫工具,例如navicat將sqlserver表匯出為sql時,可能每行語句使用GO批處理語句結束,則如果需要使用ScriptRunner物件執行sql指令碼,則需要手動將GO批處理語句替換為”,"

其他可執行sql指令碼的工具:flyway、ant(可自行百度,推薦使用ibatis,簡單、易操作)

以下附上mybatis下載連結: