1. 程式人生 > >Java實現資料庫備份並利用ant匯入SQL指令碼

Java實現資料庫備份並利用ant匯入SQL指令碼

開發十年,就只剩下這套架構體系了! >>>   

資料備份對於經常在運維部署方面的工作者來說,是一件相對簡單的事情,都可以通過某一個SQL工具進行備份,但是如果在專案運行當中,我們需要對資料進行實時,或者是每隔一星期,一個月,等等進行資料的備份,這樣就需要java工具來操作備份SQL檔案,目前可以通過呼叫mysql安裝的命令進行資料備份,另外通過Job任務排程器進行配合使用,這裡技術選型為Quartz。

在下面程式碼當中address為SQL指令碼檔案存放的地址。

其中path為mysql的安裝位置:

D:\mysql\mysql-5.6.35-winx64\bin

public Map<String, Object> exportDatabase(String address) {
Map<String, Object> resultMap = new HashedMap();
try {
String path = PropertiesFileUtil.getInstance("sql").get("path");
String root = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.username");
String dataBase = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.dataBase");
String table = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.table");
String password = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.password");
String sqlName = System.currentTimeMillis() + ".sql";
Runtime rt = Runtime.getRuntime();
Process child = rt.exec(path + "mysqldump -u" + root + " -p" + password + " -R -c --set-charset=utf8 " + dataBase + " " + table + "");
InputStream in = child.getInputStream();
InputStreamReader xx = new InputStreamReader(in, "utf8");
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();

FileOutputStream fout = new FileOutputStream(address + "/" + sqlName);
OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
writer.write(outStr);
writer.flush();
in.close();
xx.close();
br.close();
writer.close();
fout.close();
resultMap.put("result", "success");
resultMap.put("data", address + "/" + sqlName);
return resultMap;
} catch (Exception e) {
e.printStackTrace();
}
resultMap.put("result", "fail");
resultMap.put("data", "地址選擇有可能出現問題");
return resultMap;
}

 

上述程式碼當中主要的是用到了Runtime,Runtime封裝了執行環境,每一個java執行例項都有一個Runtime類為例項,使程式能夠與其環境相接。

一般不能例項化一個Runtime物件,應用程式不能建立自己的Runtime例項,但是可以通過getRuntime的方法獲取當前Runtime執行時物件的引用。

一旦得到當前的Runtime物件的引用,就可以呼叫Runtime物件的方法去控制java虛擬機器的狀態和行為。

 

執行SQL指令碼,我們可以通過ant來實現,首先我們引入ant的jar包

<!-- https://mvnrepository.com/artifact/org.apache.ant/ant -->
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.1</version>
</dependency>

 

public Map<String, Object> importDatabase(String filepath) {
Map<String, Object> resultMap = new HashedMap();
try {
String username = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.username");
String password = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.password");
String url = PropertiesFileUtil.getInstance("sql").get("sql.jdbc.url");
String driverClassName =PropertiesFileUtil.getInstance("sql").get("sql.jdbc.driver");
String filepathName = filepath.substring(0, filepath.lastIndexOf("."));
String outputPath = filepathName + ".out";

SQLExec sqlExec = new SQLExec();
//設定資料庫引數
sqlExec.setDriver(driverClassName);
sqlExec.setUrl(url);
sqlExec.setUserid(username);
sqlExec.setPassword(password);
//設定字元編碼
sqlExec.setEncoding("UTF-8");
//要執行的指令碼
sqlExec.setSrc(new File(filepath));
//有出錯的語句該如何處理
sqlExec.setOnerror((SQLExec.OnError) (EnumeratedAttribute.getInstance(
SQLExec.OnError.class, "abort")));
sqlExec.setPrint(true); //設定是否輸出
//輸出到檔案 sql.out 中;不設定該屬性,預設輸出到控制檯
sqlExec.setOutput(new File(outputPath));
sqlExec.setProject(new Project()); // 要指定這個屬性,不然會出錯
sqlExec.execute();
logger.info("執行sql指令碼檔案成功");
resultMap.put("result", "success");
} catch (Exception e) {
logger.info("執行sql指令碼檔案失敗");
e.printStackTrace();
resultMap.put("result", "fail");
return resultMap;
}
return resultMap;
}

 歡迎關注微信公眾號摘星族

相關推薦

Java實現資料庫備份利用ant匯入SQL指令碼

開發十年,就只剩下這套架構體系了! >>>   

java實現從txt文字檔案批量匯入資料至資料庫

今天同事讓我準備一個專案的測試資料,要向一個表中插入上千條記錄,並且保證每條記錄內容不同,如果用手工一條一條插入肯定是不可能,也不會有哪個SB去做這樣的事,我最開始想到了用迴圈,但要求插入的記錄內容不能相同,用迴圈實現比較麻煩,於是我想到了將記錄從文字檔案匯入至資料庫(其實

JAVA實現資料庫資料匯入/匯出到Excel(POI技術)

準備工作: 1.匯入POI包:POI下載地址:http://download.csdn.net/detail/zxm1306192988/9522142(重要) 如下 2.匯入匯出到Excel工具類ExcelUtil.java,封裝了POI對Excel的操作 pa

使用java實現自動備份mysql資料庫

在實際應用中,定時備份資料庫是一件非常重要的工作,下面是關於利用java程式實現資料庫自動呼叫的方法,其實也不一定非要用java語言了,只要原理會了,大家大可使用其他語言來實現。話不多說,下面就來演示一下如何自動備份mysql下的abc資料庫: 1,在java API中為我們提供了一個Runtime類

Java實現資料庫備份-MySQL版

java實現mysql備份資料,直接code工具類 import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOExc

IO流讀取資料檔案,將資料寫入資料庫記錄資料匯入日誌

流程分析: 資料型別: ROUTE_ID,LXBM,ROAD_NAME,SRC_LON,SRC_LAT,DEST_LON,DEST_LAT 10000,G50,滬渝高速,115.8605349,30.08934467,115.5437817,30.08898601 10001,G

JAVA實現資料庫前端與後臺的連線,顯示登入成功並且跳轉至後臺資料庫

撰寫人——軟體二班——陳喜平 注意要啟動資料庫,不然無法和後臺連結 登入成功直接跳轉至資料列表 如圖 登入不成功,提示框彈出 如圖 完整工程包: 連結:https://pan.baidu.com/s/1e_iJQ6sHIOoeLYWoeXBP5A 提取碼:djhh (需

ACCPS2-03使用java實現資料庫程式設計考試試題參照

MySQL資料庫SQL語句 CREATE DATABASE  `Apply`; USE `Apply`; DROP TABLE IF EXISTS `Apply_Info`; CREATE TABLE  `Apply_Info`(     

Java實現資料庫與eclipse的連線

JavaBean:用於傳遞資料,擁有與資料相關的邏輯處理 JSP:從Model接收資料並生成HTML Servlet:接收HTTP請求並控制Model和View jdbc:用於驅動連線 一、【建立資料庫】 在mysql中新建一個名為course的資料庫,並在其中新建一個course資料表,包含四個欄

java連線資料庫把查詢的結果轉換為JSON步驟記錄

myeclipse連線mysql資料庫 下載mysql和myeclipse;- 記錄一下我的myeclipse連線mysql所遇見的問題 1.第一步在myeclipse建立一個java工程 new->java project 2.第二步在工程檔案下建立li

《程式設計珠璣》程式碼之路12:如何用C/C++實現array[-1]利用它寫出優美的程式碼

我們就以最大子陣列和為例: 最大子段和問題:給一組數,計算最大子段和。 在部落格:最大欄位和的6種解法,解法三中,我們提到了儲存前i項和的操作: cache[i]代表前i-1項之和,因為在c/c++中,cache[-1]會越界,所以如果用cache[i]代表前i項和的話,那麼在用遞推公式

Java實現資料庫的讀寫分離

引言 1、讀寫分離:可以通過Spring提供的AbstractRoutingDataSource類,重寫determineCurrentLookupKey方法,實現動態切換資料來源的功能;讀寫分離可以有效減輕寫庫的壓力,又可以把查詢資料的請求分發到不同讀庫; 2、寫資料庫:當呼叫insert、update、d

java 讀取資料庫資料下載為Excel

java 讀取資料庫資料並下載為Excel 前臺 html <input type="button" id="javaExcel" value="java下載表格"> script <script> $("#javaExcel").clic

Java呼叫資料庫備份命令mysqldump

在沒有正規DBA,伺服器單一,小型專案的時候,總會有些的備份資料庫的需求; 資料庫一般備份命令: //        1.匯出結構不匯出資料 //        mysqldump --opt -d 資料庫名 -

劍指offer-Java實現:題目5、利用兩個棧實現佇列

題目描述 用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。   思路:棧的特點:先進後出 。 佇列特點:先進先出。自己畫了畫圖,看的比較秦楚,大概是每次進佇列操作都進stack1棧,出佇列時必須先把stack1彈棧到stack2中,這樣剛好就

SQL Server 維護計劃實現資料庫備份(策略實戰)

一、背景 之前寫過一篇關於備份的文章:SQL Server 維護計劃實現資料庫備份,上面文章使用完整備份和差異備份基本上能解決資料庫備份的問題,但是為了保障資料更加安全,我們需要再次完善我們的備份計劃; 下面這篇文章主要加入了日誌備份,並對設計備份的頻率和設計命名規範等問題進行實戰; 二、最佳實踐

java實現閏年區分計算一天在一年中的第幾天

// date為"2018-01-27"形式 public static float getJ(String date){ int year = 0; int MM = 0; int dd = 0;

JAVA實現excel表格匯出,(IDEA 匯入jar包操作)

1、工具 工欲善其事,必先利其器,我打算把資料庫中的資料匯出成為Excel表格,到網上搜了一下需要的工具: - POI POI下載地址: - Poi.jar - 官網下載 2、具體操作步驟 先把poi的jar匯入,匯入方式如下:

mongodb資料庫備份利用shell指令碼編寫

1、指令備份 MongoDB提供了備份工具,mongodump.exe,在bin目錄下,其用法如下: mongodump.exe-hlocalhost-ddatabase_name -u use

如何通過Java實現生成excel通過流的方式返回,提供下載!!

jxl.jar是通過java操作excel表格的工具類庫,還有一種是poi.這裡介紹jxl類來操作. import jxl.Workbook; import jxl.format.Alignment; import jxl.format.Border; import jxl