<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java實現web應用(備份還原數據庫)

    ----------------------------------------------------->>>>>>>>

     

    原理:MySQL 數據庫備份原理: Navicat等數據庫界面軟件通用的數據庫備份原理就是直

    接調用MYSQL本身的系統命令。

     

    MySQL本身的系統命令:

    --opt –h localhost --user=root  --password=admin --lock-all-tables=true --result-file=E://oes//2221.sql --default-character-set=utf8 oes

    解析:主機–h,用戶名--user,密碼—password,鎖定所有表--lock-all-tables=true

          目標文件--result-file,編碼--default-character-set=utf8,數據源oes

     

    Java中執行系統命令方法:

                         Runtime cmd = Runtime.getRuntime();

                         Process p = cmd.exec(“”);   //執行CMD指令(String)

     

    由于無法確定主機是否配置了MySQL環境變量,所以需要最保險的確定MySQLmysqldump的位置,它存在于MySQL安裝文件夾得Bin目錄下,問題就是如何獲取MySQL的安裝目錄?

     

    ----------------------------------------------------->>>>>>>>

     

    針對于獲取MySQL的安裝目錄,我用的是比較笨的方法:解析注冊表。

    找到注冊表中MySQL的軟件信息,里面包含有軟件的安裝地址,卸載地址,版本號等等基本信息,直接取用它的安裝信息就行。

     

    軟件信息在注冊表中的位置:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\

     

    軟件關聯注冊表中軟件信息:

            

            

     

    ----------------------------------------------------->>>>>>>>

    CheckSoftware,解析MySQL軟件安裝地址

     

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

     

    public class CheckSoftware {

       /*

        * 遍歷注冊表,查詢MySQL的注冊表關聯

        */

       public static String check() throws Exception {

          Runtime runtime = Runtime.getRuntime();

          Process process = null;

          process = runtime

                .exec("cmd /c reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\");

          BufferedReader in = new BufferedReader(new InputStreamReader(

                process.getInputStream()));

          String string = null;

          while ((string = in.readLine()) != null) {

             process = runtime.exec("cmd /c reg query " + string

                    + " /v DisplayName");

             BufferedReader name = new BufferedReader(new InputStreamReader(

                    process.getInputStream()));

             String message = queryValue(string, "DisplayName");

             if (message != null && message.contains("MySQL")) {

                String message2 = queryValue(string, "InstallLocation");

                return message2;

             }

     

          }

          in.close();

          process.destroy();

          return null;

       }

     

       /*

        * 查詢出需要的MySQL服務的安裝路徑

        */

       private static String queryValue(String string, String method)

             throws IOException {

          String pathString = "";

     

          Runtime runtime = Runtime.getRuntime();

          Process process = null;

          BufferedReader br = null;

          process = runtime.exec("cmd /c reg query " + string + " /v " + method);

          br = new BufferedReader(new InputStreamReader(process.getInputStream()));

          br.readLine();

          br.readLine();// 去掉前兩行無用信息

          if ((pathString = br.readLine()) != null) {

             pathString = pathString.replaceAll(method + "    REG_SZ    ", ""); // 去掉無用信息

             return pathString;

          }

          return pathString;

       }

    }

     

     

    ----------------------------------------------------->>>>>>>>

    JavaMysql備份還原數據庫

     

    import java.io.File;

    import java.io.IOException;

    import java.io.InputStream;

    import java.util.Properties;

     

    public class JavaMysql {

       /*

        * 備份數據庫 1、讀取配置文件 2、啟動智能查詢Mysql安裝目錄 3、備份數據庫為sql文件

        */

       public static void backup(String sql) {

     

          Properties pros = getPprVue("prop.properties");

          String username = pros.getProperty("username");

          String password = pros.getProperty("password");

     

          CheckSoftware c = null;

          try {

             System.out.println("MySQL服務安裝地址 "+c.check().toString());

          } catch (Exception e2) {

             e2.printStackTrace();

          }

          String mysqlpaths;

          try {

             mysqlpaths = c.check().toString() + "bin" + "\\";

     

             String databaseName = pros.getProperty("databaseName");

             String address = pros.getProperty("address");

             String sqlpath = pros.getProperty("sql");

             File backupath = new File(sqlpath);

             if (!backupath.exists()) {

                backupath.mkdir();

             }

     

             StringBuffer sb = new StringBuffer();

     

             sb.append(mysqlpaths);

             sb.append("mysqldump ");

             sb.append("--opt ");

             sb.append("-h ");

             sb.append(address);

             sb.append(" ");

             sb.append("--user=");

             sb.append(username);

             sb.append(" ");

             sb.append("--password=");

             sb.append(password);

             sb.append(" ");

             sb.append("--lock-all-tables=true ");

             sb.append("--result-file=");

             sb.append(sqlpath);

             sb.append(sql);

             sb.append(" ");

             sb.append("--default-character-set=utf8 ");

             sb.append(databaseName);

             System.out.println("cmd指令 "+sb.toString());

             Runtime cmd = Runtime.getRuntime();

             try {

                Process p = cmd.exec(sb.toString());

             } catch (IOException e) {

                e.printStackTrace();

             }

          } catch (Exception e1) {

             e1.printStackTrace();

          }

       }

     

       /*

        * 讀取屬性文件

        */

       public static Properties getPprVue(String properName) {

     

          InputStream inputStream = JavaMysql.class.getClassLoader()

                .getResourceAsStream(properName);

          Properties p = new Properties();

     

          try {

             p.load(inputStream);

             inputStream.close();

          } catch (IOException e) {

             e.printStackTrace();

          }

     

          return p;

     

       }

     

       /*

        * 根據備份文件恢復數據庫

        */

       public static void load(String filename) {

          Properties pros = getPprVue("prop.properties");

          String root = pros.getProperty("jdbc.username");

          String pass = pros.getProperty("jdbc.password");

          String mysqlpaths = c.check().toString() + "bin" + "\\";

          String sqlpath = pros.getProperty("sql");

          String filepath = mysqlpaths + sqlpath + filename; // 備份的路徑地址

     

          String stmt1 = mysqlpaths + "mysqladmin -u " + root + " -p" + pass

                + " create finacing"; // -p后面加的是你的密碼

          String stmt2 = mysqlpaths + "mysql -u " + root + " -p" + pass

                + " finacing < " + filepath;

          String[] cmd = { "cmd", "/c", stmt2 };

          try {

             Runtime.getRuntime().exec(stmt1);

             Runtime.getRuntime().exec(cmd);

             System.out.println("數據已從 " + filepath + " 導入到數據庫中");

          } catch (IOException e) {

             e.printStackTrace();

          }

     

       }

     

       /*

        * Test測試

        */

       public static void main(String[] args) throws IOException {

          backup("2221.sql");

       }

    }

     

    ----------------------------------------------------->>>>>>>>

    屬性文件: prop.properties,動態配置用戶名及密碼等基本屬性

     

    username = root

    password = admin

    sql = E://oes//

    address=localhost

    databaseName=oes
    http://cobaya.cn/

     

    posted on 2012-09-07 10:08 Nirvana reborn 閱讀(5852) 評論(6)  編輯  收藏 所屬分類: ★開發經驗

    評論

    # re: java實現web應用(備份還原數據庫) 2012-09-10 15:41 Nirvana reborn

    攢!  回復  更多評論   

    # re: java實現web應用(備份還原數據庫) 2012-09-11 10:05 Milo的海域

    現在不是mysql部署到linux服務器上的應用居多么,在linux里我知道mysql的bin目錄一般是在PATH環境變量里的,可以直接用里面的命令比如mysqldump  回復  更多評論   

    # re: java實現web應用(備份還原數據庫) 2012-09-11 15:29 Nirvana reborn

    @Milo的海域
    windows和Linux都可以配置環境變量,當配置之后就不需要擔心路徑問題了!
    這里做的應用主要是針對于任何的服務器,嘻嘻!考慮到任何特殊情況的解決!  回復  更多評論   

    # re: java實現web應用(備份還原數據庫) 2012-10-18 22:42 daf

    為什么不能恢復數據呢?
      回復  更多評論   

    # re: java實現web應用(備份還原數據庫) 2012-10-18 22:43 daf

    恢復數據時只有數據庫沒有響應的表,也不報錯,求解釋,謝謝。  回復  更多評論   

    # re: java實現web應用(備份還原數據庫) 2013-06-18 14:45 有點生澀

    為什么我的無法執行啊,不能遍歷mysql注冊信息  回復  更多評論   

    <2012年9月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    導航

    統計

    公告

    我好喜歡它,
    我的 QQ 66013804
    我想做技術流,可是我很懶,
    博客新地址:<a href="

    隨筆分類(19)

    文章檔案(1)

    博主鏈接

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 性感美女视频免费网站午夜| 国产zzjjzzjj视频全免费| 亚洲最新在线视频| 日本特黄特色aa大片免费| 亚洲五月午夜免费在线视频| 亚洲高清免费在线观看| 免费A级毛片无码久久版| 免费人成黄页在线观看日本| 亚洲熟妇无码八V在线播放| 亚洲最大AV网站在线观看| 免费H网站在线观看的| 人妻仑乱A级毛片免费看| 亚洲精品视频在线播放| 免费国产怡红院在线观看| 亚洲免费在线视频| 污视频网站在线观看免费| 亚洲无砖砖区免费| 亚洲高清最新av网站| 永久免费毛片在线播放| a级毛片在线免费| 亚洲av无码专区在线电影| 日韩亚洲Av人人夜夜澡人人爽 | 精品亚洲视频在线| 亚洲人成网址在线观看| 无码不卡亚洲成?人片| 18禁黄网站禁片免费观看不卡| 国产亚洲精品国产福利在线观看| 久久久国产精品亚洲一区| 亚洲视频在线精品| 女人与禽交视频免费看| 日本免费一区二区三区| 久青草国产免费观看| 亚洲精品国产高清在线观看| 亚洲国产精品久久久久网站| 亚洲一区二区三区无码影院| 免费高清av一区二区三区| 2015日韩永久免费视频播放| 青柠影视在线观看免费| 曰韩无码AV片免费播放不卡| 亚洲AV无码专区亚洲AV桃| 一区二区亚洲精品精华液|