<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 閱讀(5864) 評論(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)

    博主鏈接

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 亚洲中文字幕久久精品无码喷水 | 亚洲性无码av在线| 伊人久久大香线蕉免费视频| 亚洲高清国产拍精品青青草原| 亚洲爆乳无码专区www| 日韩一级免费视频| 国产亚洲精品美女久久久久| 亚洲福利视频一区二区| 亚洲国产欧洲综合997久久| 日本牲交大片免费观看| 青青免费在线视频| 久久亚洲欧洲国产综合| 韩日电影在线播放免费版| 亚洲av无码乱码国产精品fc2| 日韩免费的视频在线观看香蕉| 亚洲伊人tv综合网色| 亚洲无砖砖区免费| 久久亚洲国产中v天仙www| 一级毛片免费观看不卡的| 亚洲第一精品电影网| 免费看大美女大黄大色| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲午夜精品第一区二区8050| 国产精品视频全国免费观看| 亚洲αv在线精品糸列| 午夜性色一区二区三区免费不卡视频| 亚洲乱码在线观看| 免费大黄网站在线观| 国产免费伦精品一区二区三区| 亚洲VA中文字幕不卡无码| 成人无码区免费A片视频WWW| 亚洲av无码成人精品国产 | 亚洲综合色区在线观看| 91制片厂制作传媒免费版樱花 | 亚洲福利电影一区二区?| 免费羞羞视频网站| 成人久久免费网站| 亚洲综合色一区二区三区| 国产精品亚洲αv天堂无码| 亚洲视频在线免费播放| 野花视频在线官网免费1|