java 怎么执行数据库命令_java 调用命令 备份mysql数据库

代码如下:

1  String command  =   " cmd /c C:/Program Files/MySQL/MySQL Server 5.0/bin>mysqldump -h localhost -u root -p aijia > E:/aijia.dmp " ;

2      try    {

3     Process process  =  Runtime.getRuntime().exec(command);

4     InputStreamReader ir  =   new  InputStreamReader(process

5       .getInputStream());

6     LineNumberReader input  =   new  LineNumberReader(ir);

7     String line;

8      while  ((line  =  input.readLine())  !=   null )

9      System.out.println(line);

10     input.close();

11     }   catch  (IOException e)   {

12     e.printStackTrace();

13    }

14

15

16

17

18  另外

19

20  首先,设置mysql的环境变量(在path中添加 % MYSQL_HOME % /bin),重启电脑。

21  完整代码:

22        /** */ /**

23       *  @param  args

24        */

25        public   static   void  main(String[] args)   {

26            /**/ /*

27           * 备份和导入是一个互逆的过程。

28           * 备份:程序调用mysql的备份命令,读出控制台输入流信息,写入.sql文件;

29           * 导入:程序调用mysql的导入命令,把从.sql文件中读出的信息写入控制台的输出流

30           * 注意:此时定向符">"和"

31            */

32          backup();

33          load();

34      }

35

36        /** */ /**

37       * 备份检验一个sql文件是否可以做导入文件用的一个判断方法:把该sql文件分别用记事本和ultra

38       * edit打开,如果看到的中文均正常没有乱码,则可以用来做导入的源文件(不管sql文件的编码格式如何,也不管db的编码格式如何)

39        */

40        public   static   void  backup()   {

41            try    {

42              Runtime rt  =  Runtime.getRuntime();

43

44               //  调用 mysql 的 cmd:

45              Process child  =  rt

46                      .exec( " mysqldump -u root --set-charset=utf8 bjse act_obj " ); //  设置导出编码为utf8。这里必须是utf8

47

48               //  把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行

49              InputStream in  =  child.getInputStream(); //  控制台的输出信息作为输入流

50

51              InputStreamReader xx  =   new  InputStreamReader(in,  " utf8 " ); //  设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码

52

53              String inStr;

54              StringBuffer sb  =   new  StringBuffer( "" );

55              String outStr;

56               //  组合控制台输出信息字符串

57              BufferedReader br  =   new  BufferedReader(xx);

58                while  ((inStr  =  br.readLine())  !=   null )   {

59                  sb.append(inStr  +   " /r/n " );

60              }

61              outStr  =  sb.toString();

62

63               //  要用来做导入用的sql目标文件:

64              FileOutputStream fout  =   new  FileOutputStream(

65                       " e:/mysql-5.0.27-win32/bin/bjse22.sql " );

66              OutputStreamWriter writer  =   new  OutputStreamWriter(fout,  " utf8 " );

67              writer.write(outStr);

68               //  注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免

69              writer.flush();

70

71               //  别忘记关闭输入输出流

72              in.close();

73              xx.close();

74              br.close();

75              writer.close();

76              fout.close();

77

78              System.out.println( " /* Output OK! */ " );

79

80           }   catch  (Exception e)   {

81              e.printStackTrace();

82          }

83

84      }

85

86        /** */ /**

87       * 导入

88       *

89        */

90        public   static   void  load()   {

91            try    {

92              String fPath  =   " e:/mysql-5.0.27-win32/bin/bjse22.sql " ;

93              Runtime rt  =  Runtime.getRuntime();

94

95               //  调用 mysql 的 cmd:

96              Process child  =  rt.exec( " mysql -u root bjse  " );

97              OutputStream out  =  child.getOutputStream(); // 控制台的输入信息作为输出流

98              String inStr;

99              StringBuffer sb  =   new  StringBuffer( "" );

100              String outStr;

101              BufferedReader br  =   new  BufferedReader( new  InputStreamReader(

102                       new  FileInputStream(fPath),  " utf8 " ));

103                while  ((inStr  =  br.readLine())  !=   null )   {

104                  sb.append(inStr  +   " /r/n " );

105              }

106              outStr  =  sb.toString();

107

108              OutputStreamWriter writer  =   new  OutputStreamWriter(out,  " utf8 " );

109              writer.write(outStr);

110               //  注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免

111              writer.flush();

112               //  别忘记关闭输入输出流

113              out.close();

114              br.close();

115              writer.close();

116

117              System.out.println( " /* Load OK! */ " );

118

119           }   catch  (Exception e)   {

120              e.printStackTrace();

121          }

122

123      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值