注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Programmer's World

记录成长的点点滴滴

 
 
 

日志

 
 

关于java调用mysql导出只导出一部分的问题 已解决  

2012-02-15 17:40:29|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近做了个java调用mysql导出的功能,因为以前没做过 所以 从网上找了个例子如下:

package com.socket;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStreamWriter;

public class test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String command="mysqldump -hlocalhost -udepot -pdepot depot>d:/depot.sql";
  System.out.println(command);
  try {
   Runtime rt = Runtime.getRuntime();

            // 调用 mysql 的 cmd:
            Process child = rt.exec(command);
          
            // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
            InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
            InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输入流编码为utf8。这里必须是utf8,否则从流中读入的是乱码           
            String inStr;
            StringBuffer sb = new StringBuffer("");
            String outStr;
            // 组合控制台输出信息字符串
            BufferedReader br = new BufferedReader(xx);
            while ((inStr = br.readLine()) != null) {
                sb.append(inStr + "\r\n");
                System.out.println(inStr);
            }
            outStr = sb.toString();
          
            // 要用来做导入用的sql目标文件:
            FileOutputStream fout = new FileOutputStream(
                    "d:\\depot.sql");
            OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
            writer.write(outStr);
            // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
            writer.flush();

            // 别忘记关闭输入输出流
            in.close();
            xx.close();
            br.close();
            writer.close();
            fout.close();

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

  } catch (Exception e) {
   e.printStackTrace();
  }
 }

}

执行该程序后 用导出后的depot.sql跟直接cmd运行导出的文件一比较,发现只写入了一小部分,于是开始找问题,

发现 BufferedReader br = new BufferedReader(xx);
            while ((inStr = br.readLine()) != null) {
                sb.append(inStr + "\r\n");
                System.out.println(inStr);
            }
这里 instr只有一部分是对的 其余都是null 初期以为是BufferedReader 缓冲池里的数据没数据没释放导致,在网上找了好久没解决,于是换个法子 直接从在cmd里导出的文件里读取看看  发现这样 写入的文件是完全的。于是又从开头找 发现了一个蛋疼得问题,

将String command="mysqldump -hlocalhost -udepot -pdepot depot>d:/depot.sql";

改成String command="mysqldump -hlocalhost -udepot -pdepot depot";

运行 全部导出 。

正在找原因

  评论这张
 
阅读(25)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017