急救!Java还原mysql数据库报错:java.io.IOException: 管道已结束。

宏奕0920 2010-03-27 01:22:06
用java做了个备份和恢复mysql数据库的程序,备份可以了,但是恢复总是报错:java.io.IOException: 管道已结束。
备份文件为.sql文件
数据库mysql5.0.22
jdk1.6
tomcat6.0
我自己修了很久都没有调好,希望各位大虾指教了.代码如下

try {
Process child = Runtime.getRuntime().exec(
"mysql -uroot -proot mandb");
OutputStream out = child.getOutputStream();// 控制台的输入信息作为输出流
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("d:\db.sql"), "utf-8"));
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8");
writer.write(outStr);
// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
out.close();
br.close();
writer.close();

System.out.println("恢复成功!");

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

}



后台错误:
java.io.IOException: 管道已结束。
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:260)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:263)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:116)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:203)
at java.io.Writer.write(Writer.java:140)
at com.rail.web.action.DatebaseAction.RstoreDB(DatebaseAction.java:118)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
...全文
906 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
当时汉就来了 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]
引用 18 楼 的回复:
引用 16 楼 的回复:

引用 10 楼 dhdhdh0920 的回复:
问题解决了,采用另外一个方式解决了


最特么鄙视这种行为,有问题叫着嚷着要帮忙;自己解决了丢几个字母在这就拍屁股走人。
说得难听点就是一种变态扭曲心理在作祟!

up
up
[/Quote]艹 解决了 也不说一下怎么解决的 没品的人!
当时汉就来了 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
引用 16 楼 的回复:

引用 10 楼 dhdhdh0920 的回复:
问题解决了,采用另外一个方式解决了


最特么鄙视这种行为,有问题叫着嚷着要帮忙;自己解决了丢几个字母在这就拍屁股走人。
说得难听点就是一种变态扭曲心理在作祟!

up
[/Quote] up
wh351531104 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

引用 10 楼 dhdhdh0920 的回复:
问题解决了,采用另外一个方式解决了


最特么鄙视这种行为,有问题叫着嚷着要帮忙;自己解决了丢几个字母在这就拍屁股走人。
说得难听点就是一种变态扭曲心理在作祟!
[/Quote]
up
tangmin823 2012-05-21
  • 打赏
  • 举报
回复
楼主,怎么解决的,可以写下方法好不?
为国读书 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dhdhdh0920 的回复:]
问题解决了,采用另外一个方式解决了
[/Quote]

最特么鄙视这种行为,有问题叫着嚷着要帮忙;自己解决了丢几个字母在这就拍屁股走人。
说得难听点就是一种变态扭曲心理在作祟!
wyz5792 2010-09-15
  • 打赏
  • 举报
回复
楼主,能不能说详细些,我也遇到这个问题,不知道怎么解决? 楼主能说详细些吗
  • 打赏
  • 举报
回复
将exec("mysql -uroot -proot mandb");
改成
exec("mysqldump -uroot -pa --set-charset=utf8 mandb");
试看看
hf_luo 2010-07-27
  • 打赏
  • 举报
回复
楼主,能不能说详细些,我也遇到这个问题,不知道怎么解决?
宏奕0920 2010-07-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hosterzhu 的回复:]
引用 10 楼 dhdhdh0920 的回复:
问题解决了,采用另外一个方式解决了


用什么解决的啊 !! 我现在也遇到这样的问题了
[/Quote]
mysqldump
-船长- 2010-07-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dhdhdh0920 的回复:]
问题解决了,采用另外一个方式解决了
[/Quote]

用什么解决的啊 !! 我现在也遇到这样的问题了
justchenjie 2010-03-27
  • 打赏
  • 举报
回复
你不是注明只是 writer.write(outStr);
// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
out.close();
br.close();
writer.close();
,你先改一下顺序!先关writer
jumpheightway 2010-03-27
  • 打赏
  • 举报
回复
对直接用mysql的导入命令
宏奕0920 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qingyuan18 的回复:]
为啥写这么多代码,直接用Mysql的导入不可以么?

Runtime.getRuntime().exec("mysql -u root --password=mandb<<d:\db.sql");
[/Quote]

试过了不行,数据量不大才800多KB怎么会报管道关闭,郁闷
2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qingyuan18 的回复:]
为啥写这么多代码,直接用Mysql的导入不可以么?

Runtime.getRuntime().exec("mysql -u root --password=mandb<<d:\db.sql");
[/Quote]up
qingyuan18 2010-03-27
  • 打赏
  • 举报
回复
为啥写这么多代码,直接用Mysql的导入不可以么?

Runtime.getRuntime().exec("mysql -u root --password=mandb<<d:\db.sql");
宏奕0920 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justchenjie 的回复:]
可能是你资源关闭顺序有问题
[/Quote]

writer.write(outStr);eclipse提示这行错误
justchenjie 2010-03-27
  • 打赏
  • 举报
回复
可能是你资源关闭顺序有问题
javafx 2010-03-27
  • 打赏
  • 举报
回复
不知道什么原因,只能帮顶
宏奕0920 2010-03-27
  • 打赏
  • 举报
回复
问题解决了,采用另外一个方式解决了
宏奕0920 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 justchenjie 的回复:]
你不是注明只是 writer.write(outStr);
// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
out.close();
br.close();
writer.close();
,你先改一下顺序!先关writer
[/Quote]
先关那个都是一样,试过了,郁闷中...

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧