java執行sql指令碼
阿新 • • 發佈:2021-01-17
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下載連結: