http://www.blogjava.net/BlueDavy/archive/2006/11/22/82909.html
需求就是:
调用Oracle EXP命令完成备份,并返回生成的备份文件名,这个备份文件会很快在其他的地方被使用。
采用Runtime.getRuntime().exec我们都知道,需要处理它的InputStream,以避免出现执行的命令输出的信息过多使得进程被堵死.
InputStreamReader isr = new InputStreamReader(process.getInputStream());
BufferedReader br = new BufferedReader(isr);
进程被挂S了,到底什么原因呢,开始瞎尝试,把读取process的InputStream的部分全部去掉,执行,竟然OK,更晕,但这个时候出现了一个问题,那就是没法知道什么时候备份文件完全生成了,如果在Runtime.getRuntime后去获取备份文件,那个时候甚至连备份文件都没生成,之后甚至尝试过轮询直到备份文件生成,再往下走,那样还是有问题,就是生成的那个备份文件永远都只有正常的一半的大小,只有在整个进程退出的时候它才正常的全部生成。
String[] cmds = new String[3];
cmds[0] = "cmd";
cmds[1] = "/C";
cmds[2]=commandBuf.toString();
Process process=Runtime.getRuntime().exec(cmds);
boolean shouldClose=false;
try {
InputStreamReader isr = new InputStreamReader(process.getErrorStream());
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null){
if(line.indexOf("错误")!=-1){
shouldClose=true;
break;
}
}
}
catch (IOException ioe) {
shouldClose=true;
}
if(shouldClose)
process.destroy();
int exitVal = process.waitFor();
说明什么呢,说明在执行oracle的exp时,出现了一个很怪的现象,就是exp在console输出的信息没有被放入InputStream,反而是放到了ErrorStream中(即使正确的情况也是),这就导致了按照正常的情况去写这段代码的话反而会出问题。
分享到:
相关推荐
java调用oracle存储过程或者函数
讲有关java如何调用ORACLE存储过程以及游标使用,它只包含JAVA调用ORACLE存储过程游标使用(上),还有JAVA调用ORACLE存储过程游标使用(上),
Java调用oracle函数返回oracle类(类似)集合
2. 然后,使用EXP工具,指定parfile文件,执行命令: exp user/user@bsrun parfile=1.txt 在其他操作系统平台上,如Linux、Unix等, EXP_Query参数转义符的解决方法与Window平台类似,只需根据具体的操作系统环境,...
Java调用oracle存储过程
用java调用oracle存储过程总结.
java调用oracle存储过程返回结果集,Record,cursor参照.pdf
通过实例详细介绍了用java调用oracle存储过程的方法和步骤,包括无返回值的存储过程、有返回值的存储过程(非列表)和返回列表的存储过程的编写、JAVA调用,是一个对存储过程调用的一个全面总结,对程序开发具体实际...
java调用oracle存储过程.wps java调用oracle存储过程.wps java调用oracle存储过程.wps
基于Java+oracle学生信息管理系统的设计与实现(含源文件).docx基于Java+oracle学生信息管理系统的设计与实现(含源文件).docx基于Java+oracle学生信息管理系统的设计与实现(含源文件).docx基于Java+oracle学生信息...
该命令使用 exp 工具来导出 Oracle 数据库中的数据。我们可以根据需要添加不同的参数,例如用户名、密码、数据库名、表名、导出地址、数据过滤条件等。 知识点 3:执行 DOS 命令并处理错误 在 Java 中,可以使用 ...
Java调用Oracle存储过程的方法
java调用oracle bpm API
Java 是一种广泛使用的编程语言,而 Oracle 数据库是一种功能强大且广泛使用的关系型数据库管理系统。在本文中,我们将探讨如何使用 Java 操作 Oracle 数据库,包括建表、插入数据和删除数据等操作。 Java 操作 ...
java调用oracle存储过程入门实例 增删改查 使用dom4j读取数据库的配置文件(xml) jdbc中connection的管理 使用threadlocal
基本查询 过滤和排序 单行函数 组函数 多表查询 子查询 集合运算 创建和管理表 光标 例外 Java调用存储过程和存储函数 触发器
JAVA中调用Oracle存储过程 JAVA中调用Oracle存储过程 JAVA中调用Oracle存储过程 JAVA中调用Oracle存储过程 JAVA中调用Oracle存储过程
java调用oracle存储过程实现增删改查
提供JAVA调用ORACLE存储过程通用类