


如何利用Java進行MySql數(shù)據(jù)庫的導(dǎo)入和導(dǎo)出
利用Java來進行Mysql數(shù)據(jù)庫的導(dǎo)入和導(dǎo)出的總體思想是通過Java來調(diào)用命令窗口執(zhí)行相應(yīng)的命令。
MySql導(dǎo)出數(shù)據(jù)庫的命令如下:
mysqldump -uusername -ppassword -hhost -Pport exportDatabaseName > exportPath 利用Java調(diào)用命令窗口執(zhí)行命令來進行MySql導(dǎo)入數(shù)據(jù)庫一般分三步走:
第一步:登錄Mysql數(shù)據(jù)庫,在登錄數(shù)據(jù)庫的時候也可以指定登錄到哪個數(shù)據(jù)庫,如果指定了則可以跳過第二步;
第二步:切換數(shù)據(jù)庫到需要導(dǎo)入的目標(biāo)數(shù)據(jù)庫
第三步:利用命令開始導(dǎo)入
在進行導(dǎo)出的時候,需要注意命令語句的運行環(huán)境,如果已經(jīng)將mysql安裝路徑下的bin加入到
系統(tǒng)的path變量中,那么在導(dǎo)出的時候可以直接使用命令語句,否則,就需要在執(zhí)行命令語句的
時候加上命令所在位置的路徑,即mysql安裝路徑想的bin下的mysqldump命令。
基本代碼如下:
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.Properties; /** * 在進行導(dǎo)出的時候,需要注意命令語句的運行環(huán)境,如果已經(jīng)將mysql安裝路徑下的bin加入到 * 系統(tǒng)的path變量中,那么在導(dǎo)出的時候可以直接使用命令語句,否則,就需要在執(zhí)行命令語句的 * 時候加上命令所在位置的路徑,即mysql安裝路徑想的bin下的mysqldump命令 * @author andy * */ public class MySqlImportAndExport { public static void main(String args[]) throws IOException { InputStream is = MySqlImportAndExport.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties properties = new Properties(); properties.load(is); // MySqlImportAndExport.export(properties);//這里簡單點異常我就直接往上拋 MySqlImportAndExport.importSql(properties); } /** * 根據(jù)屬性文件的配置導(dǎo)出指定位置的指定數(shù)據(jù)庫到指定位置 * @param properties * @throws IOException */ public static void export(Properties properties) throws IOException { Runtime runtime = Runtime.getRuntime(); String command = getExportCommand(properties); runtime.exec(command);//這里簡單一點異常我就直接往上拋 } /** * 根據(jù)屬性文件的配置把指定位置的指定文件內(nèi)容導(dǎo)入到指定的數(shù)據(jù)庫中 * 在命令窗口進行mysql的數(shù)據(jù)庫導(dǎo)入一般分三步走: * 第一步是登到到mysql; mysql -uusername -ppassword -hhost -Pport -DdatabaseName;如果在登錄的時候指定了數(shù)據(jù)庫名則會 * 直接轉(zhuǎn)向該數(shù)據(jù)庫,這樣就可以跳過第二步,直接第三步; * 第二步是切換到導(dǎo)入的目標(biāo)數(shù)據(jù)庫;use importDatabaseName; * 第三步是開始從目標(biāo)文件導(dǎo)入數(shù)據(jù)到目標(biāo)數(shù)據(jù)庫;source importPath; * @param properties * @throws IOException */ public static void importSql(Properties properties) throws IOException { Runtime runtime = Runtime.getRuntime(); //因為在命令窗口進行mysql數(shù)據(jù)庫的導(dǎo)入一般分三步走,所以所執(zhí)行的命令將以字符串?dāng)?shù)組的形式出現(xiàn) String cmdarray[] = getImportCommand(properties);//根據(jù)屬性文件的配置獲取數(shù)據(jù)庫導(dǎo)入所需的命令,組成一個數(shù)組 //runtime.exec(cmdarray);//這里也是簡單的直接拋出異常 Process process = runtime.exec(cmdarray[0]); //執(zhí)行了第一條命令以后已經(jīng)登錄到mysql了,所以之后就是利用mysql的命令窗口 //進程執(zhí)行后面的代碼 OutputStream os = process.getOutputStream(); OutputStreamWriter writer = new OutputStreamWriter(os); //命令1和命令2要放在一起執(zhí)行 writer.write(cmdarray[1] + "\r\n" + cmdarray[2]); writer.flush(); writer.close(); os.close(); } /** * 利用屬性文件提供的配置來拼裝命令語句 * 在拼裝命令語句的時候有一點是需要注意的:一般我們在命令窗口直接使用命令來 * 進行導(dǎo)出的時候可以簡單使用“>”來表示導(dǎo)出到什么地方,即mysqldump -uusername -ppassword databaseName > exportPath, * 但在Java中這樣寫是不行的,它需要你用-r明確的指出導(dǎo)出到什么地方,如: * mysqldump -uusername -ppassword databaseName -r exportPath。 * @param properties * @return */ private static String getExportCommand(Properties properties) { StringBuffer command = new StringBuffer(); String username = properties.getProperty("jdbc.username");//用戶名 String password = properties.getProperty("jdbc.password");//用戶密碼 String exportDatabaseName = properties.getProperty("jdbc.exportDatabaseName");//需要導(dǎo)出的數(shù)據(jù)庫名 String host = properties.getProperty("jdbc.host");//從哪個主機導(dǎo)出數(shù)據(jù)庫,如果沒有指定這個值,則默認(rèn)取localhost String port = properties.getProperty("jdbc.port");//使用的端口號 String exportPath = properties.getProperty("jdbc.exportPath");//導(dǎo)出路徑 //注意哪些地方要空格,哪些不要空格 command.append("mysqldump -u").append(username).append(" -p").append(password)//密碼是用的小p,而端口是用的大P。 .append(" -h").append(host).append(" -P").append(port).append(" ").append(exportDatabaseName).append(" -r ").append(exportPath); return command.toString(); } /** * 根據(jù)屬性文件的配置,分三步走獲取從目標(biāo)文件導(dǎo)入數(shù)據(jù)到目標(biāo)數(shù)據(jù)庫所需的命令 * 如果在登錄的時候指定了數(shù)據(jù)庫名則會 * 直接轉(zhuǎn)向該數(shù)據(jù)庫,這樣就可以跳過第二步,直接第三步; * @param properties * @return */ private static String[] getImportCommand(Properties properties) { String username = properties.getProperty("jdbc.username");//用戶名 String password = properties.getProperty("jdbc.password");//密碼 String host = properties.getProperty("jdbc.host");//導(dǎo)入的目標(biāo)數(shù)據(jù)庫所在的主機 String port = properties.getProperty("jdbc.port");//使用的端口號 String importDatabaseName = properties.getProperty("jdbc.importDatabaseName");//導(dǎo)入的目標(biāo)數(shù)據(jù)庫的名稱 String importPath = properties.getProperty("jdbc.importPath");//導(dǎo)入的目標(biāo)文件所在的位置 //第一步,獲取登錄命令語句 String loginCommand = new StringBuffer().append("mysql -u").append(username).append(" -p").append(password).append(" -h").append(host) .append(" -P").append(port).toString(); //第二步,獲取切換數(shù)據(jù)庫到目標(biāo)數(shù)據(jù)庫的命令語句 String switchCommand = new StringBuffer("use ").append(importDatabaseName).toString(); //第三步,獲取導(dǎo)入的命令語句 String importCommand = new StringBuffer("source ").append(importPath).toString(); //需要返回的命令語句數(shù)組 String[] commands = new String[] {loginCommand, switchCommand, importCommand}; return commands; } } 上述使用的jdbc.properties文件
jdbc.username=root jdbc.password=password jdbc.host=localhost jdbc.port=3306 jdbc.exportDatabaseName=dbName jdbc.exportPath=d\:\\dbName.sql jdbc.importDatabaseName=test jdbc.importPath=d\:\\dbName.sql
關(guān)鍵字:Java、MySql數(shù)據(jù)庫、導(dǎo)入和導(dǎo)出
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機IP講解
- CentOS7使用hostapd實現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解