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的导出工具`exp`完成数据备份。 2. **备份流程设计**: - 用户通过JSP页面输入数据库用户名、密码、网络连接名以及备份文件名等信息。 - 提交表单后,Java后端处理这些信息,并...
3. **导出过程**:在使用exp.exe(或者expdp)时,你需要指定连接参数(如用户名、密码、数据库连接),以及要导出的对象和选项。例如,可以指定只导出特定的表、模式或者整个数据库。导出过程中,所有元数据和数据...
总结,Java调用Oracle存储过程的关键在于使用`CallableStatement`,根据存储过程的参数类型,正确地设置IN、OUT或IN/OUT参数。同时,别忘了在操作完成后关闭所有数据库资源,以避免资源泄漏。在实际应用中,可能还...
本节将深入探讨如何使用Java来操作Oracle数据库,特别是调用存储过程。 首先,我们需要了解JDBC的基本概念。JDBC是Java平台的标准接口,它允许Java程序连接到各种类型的数据库,包括Oracle。在Java中,我们通常通过...
4. **加载驱动并建立连接**:使用`DriverManager`类的`registerDriver()`方法注册Oracle JDBC驱动,然后调用`getConnection()`方法建立连接。 ```java try { Class.forName("oracle.jdbc.driver.OracleDriver"); ...
Oracle数据库的备份是确保数据安全的关键操作,而`exp`和`imp`是Oracle数据库中用于逻辑备份的主要工具。这两个命令允许用户将数据库中的数据导出(exp)到文件,然后在需要时导入(imp)回数据库。逻辑备份在某些...
这是一个基于Java编程语言和Oracle数据库开发的信息管理系统源代码项目,名为"hotel-management-master"。这个系统主要用于帮助管理者高效地处理员工信息和用户数据,尤其适用于酒店行业的信息管理。以下是关于这个...
Oracle JDBC驱动主要有 Thin 和 Thick 两种类型,ojdbc7.jar 属于 Thin 驱动,它是一个纯Java实现,不依赖于Oracle客户端的库,因此可以在任何支持Java的环境中使用。 Oracle JDBC驱动提供了以下功能: 1. 数据库...
总结起来,"在Oracle中使用Java Sources"是一个高效且灵活的方法,能够充分利用Java的生态系统,包括调用API接口。然而,这也需要对Oracle数据库的Java支持、PL/SQL以及API接口的使用有深入理解,以确保代码的正确性...
本篇文章将详细探讨如何在Oracle环境中通过Java使用Socket进行通信,监听端口并进行相关的测试。 首先,我们需要理解Socket编程的基本概念。Socket是网络通信中的一个接口,它允许应用程序之间通过网络交换数据。在...
本文将深入探讨Oracle数据库中使用exp/imp工具进行逻辑增量备份的方法及其恢复策略。 1一、实现需求 在Oracle数据库环境中,确保数据安全性和可用性是关键。逻辑增量备份的主要目标是在最小化系统停机时间和资源...
在这个毕业设计项目中,我们主要探讨的是如何使用Java语言调用Oracle数据库的存储过程来实现分页功能,这在Web应用程序中非常常见,尤其是在处理大数据量时,为了提高用户体验,分页是一种有效的数据展示方式。...
在Java应用中,我们通常使用JDBC(Java Database Connectivity)API来实现对数据库的操作,而ojdbc14.jar正是Oracle数据库对应的JDBC驱动。 JDBC是Java平台上的标准接口,它允许Java程序与各种数据库进行通信。...
### 快速Java和Oracle集成SSH开发注意问题 #### Oracle基本操作 **1. 登录** - 使用ORACLE系统自带管理员(SYSTEM)用户登录,权限设置为DBA(拥有广泛的权限)。通常,在进行数据库管理操作时,推荐使用具有...
- 如果频繁进行此类操作,可以考虑使用Oracle的JDBC驱动直接执行SQL语句进行数据导出,而不是调用操作系统命令,这可能会更高效且可控。 总结来说,`SyncExpImpUtil` 类提供了简单的方式通过Java程序导出和导入...
在与Oracle数据库配合时,Java开发者经常使用JDBC(Java Database Connectivity)来连接和操作数据库。JDBC为Java提供了标准接口,用于执行SQL语句、获取结果集等。 实体类(Entity Class)是Java代码中的核心部分...
【标题】"简单 图书馆管理系统 Java+Oracle" 涉及到的主要知识点有: 1. **Java编程语言**:Java是一种广泛使用的面向对象的编程语言,以其“一次编写,到处运行”的特性著称。在这个图书馆管理系统中,Java被用作...
通过这个项目,开发者不仅可以深入学习Java编程和Oracle数据库的使用,还能提升数据库设计、GUI开发以及软件工程实践的能力。对于初学者来说,这是一个很好的实战练习,涵盖了众多核心的IT技术。
Java使用JDBC(Java Database Connectivity)来连接Oracle数据库是一个常见的任务,它允许Java应用程序与各种数据库进行交互。在本场景中,`ojdbc6.jar`是Oracle提供的JDBC驱动程序,用于建立Java应用程序与Oracle...
【Java 访问 Oracle9i 数据库的方法】 Java 语言在与关系型数据库交互时,Oracle9i 是一种常见的选择。Oracle9i 提供了多种方式供 Java 程序进行数据访问,主要包括 JDBC(Java Database Connectivity)和 SQLJ。这...