`
vvggsky
  • 浏览: 67371 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java调用Oracle EXP备忘

    博客分类:
  • J2SE
阅读更多
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存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    java调用oracle含有clob参数的存储过程.doc

    "Java 调用 Oracle 含有 CLOB 参数的存储过程" Java 调用 Oracle 含有 CLOB 参数的存储过程是一种常用的数据库操作方式,下面是该过程的详细介绍: 1. 连接数据库 在 Java 中连接 Oracle 数据库需要使用 Oracle ...

    基于Java+oracle学生信息管理系统的设计与实现(含源文件).docx

    《基于Java+Oracle的学生信息管理系统的设计与实现》 在当今信息化时代,教育领域的管理也日益依赖于高效、精准的信息系统。本文将详细阐述一个利用Java编程语言和Oracle数据库技术构建的学生信息管理系统的设计与...

    java代码oracle数据库批量插入

    这是为了确保Java应用程序能够识别并使用Oracle的JDBC驱动。 - 通过`DriverManager.getConnection(url, user, password);`建立数据库连接。这里的`url`、`user`和`password`是在前一步骤中定义的连接信息。 #### 4....

    Java日历及备忘录

    Java日历及备忘录程序是一个实用的桌面应用程序,它模仿了Windows操作系统中的日历功能,并添加了备忘录管理特性。这个程序的核心是利用Java编程语言实现的,旨在帮助用户方便地查看日期并设置提醒,提高个人或工作...

    java对oracle数据库中blob字段的处理

    在IT领域,尤其是在Java开发与Oracle数据库交互的过程中,处理BLOB(Binary Large Object)类型字段是一项常见且重要的任务。BLOB字段主要用于存储大量的二进制数据,如图像、音频、视频或任何其他非文本格式的数据...

    java调用oracle存储过程

    总结,Java调用Oracle存储过程的关键在于使用`CallableStatement`,根据存储过程的参数类型,正确地设置IN、OUT或IN/OUT参数。同时,别忘了在操作完成后关闭所有数据库资源,以避免资源泄漏。在实际应用中,可能还...

    oracle在导出dmp缺少的exp.exewenjain

    - **使用Data Pump命令行工具"expdp"**:Oracle 10g及以后的版本推荐使用"expdp",它是"exp.exe"的增强版本,功能更强大且更易用。即使"exp.exe"缺失,也可以通过"expdp"完成数据导出,如`expdp username/password ...

    java-oracle.zip_Empoyee_java+oracle_oracle

    这个"java-oracle.zip"压缩包显然包含了关于如何使用Java连接Oracle数据库并进行操作的一个示例,特别地,它用到了Employee数据库。下面我们将详细探讨相关的Java和Oracle连接知识点。 1. **JDBC (Java Database ...

    JAVA+ORACLE公交信息管理系统

    本文将深入探讨使用JAVA和ORACLE技术构建的公交信息管理系统,揭示其核心原理与实现方式。 首先,JAVA作为一种跨平台的编程语言,以其丰富的类库、面向对象的特性以及良好的可移植性,成为了开发公交信息管理系统的...

    使用Java操作oracle数据库

    本节将深入探讨如何使用Java来操作Oracle数据库,特别是调用存储过程。 首先,我们需要了解JDBC的基本概念。JDBC是Java平台的标准接口,它允许Java程序连接到各种类型的数据库,包括Oracle。在Java中,我们通常通过...

    Java获取Oracle存储过程返回的Cursor

    在Java编程中,有时我们需要调用Oracle数据库的存储过程,特别是当存储过程返回一个游标(Cursor)时,这种情况在处理大量数据或者分页查询时很常见。游标允许我们逐行处理结果集,而无需一次性加载所有数据,这对于...

    java jdbc oracle代码

    当我们谈论“Java JDBC Oracle代码”时,我们指的是使用Java的JDBC API来与Oracle数据库进行通信的程序。 在Java中,JDBC提供了以下核心概念: 1. **Driver Manager**: 这是JDBC的入口点,负责管理所有注册的...

    oracle的expimp使用方法学习

    Oracle数据库的备份是确保数据安全的关键操作,而`exp`和`imp`是Oracle数据库中用于逻辑备份的主要工具。这两个命令允许用户将数据库中的数据导出(exp)到文件,然后在需要时导入(imp)回数据库。逻辑备份在某些...

    图书馆管理系统-Java+Oracle

    在Java开发中,可能会使用MVC(Model-View-Controller)设计模式,将业务逻辑、数据显示和用户交互分离,提高代码的可维护性和可扩展性。模型层负责数据处理,视图层负责用户界面展示,控制器协调模型和视图的交互。...

    oracle调用java 使用socket监听端口测试

    本篇文章将详细探讨如何在Oracle环境中通过Java使用Socket进行通信,监听端口并进行相关的测试。 首先,我们需要理解Socket编程的基本概念。Socket是网络通信中的一个接口,它允许应用程序之间通过网络交换数据。在...

    Oracle数据库逻辑增量备份之exp/imp

    本文将深入探讨Oracle数据库中使用exp/imp工具进行逻辑增量备份的方法及其恢复策略。 1一、实现需求 在Oracle数据库环境中,确保数据安全性和可用性是关键。逻辑增量备份的主要目标是在最小化系统停机时间和资源...

    Oracle10g-10.1.0.2客户端的exp.exe文件

    Oracle 10g是一款历史悠久但仍然广泛使用的数据库管理系统,它提供了强大的数据管理和处理能力。在本文中,我们将深入探讨Oracle10g客户端与服务端之间的兼容性问题,以及如何解决因版本不一致导致的导入导出问题。 ...

    毕业设计-源码Java调用Oracle存储过程实现分页功能

    在这个毕业设计项目中,我们主要探讨的是如何使用Java语言调用Oracle数据库的存储过程来实现分页功能,这在Web应用程序中非常常见,尤其是在处理大数据量时,为了提高用户体验,分页是一种有效的数据展示方式。...

    Java - Oracle - 数据库 驱动包 jar

    在Java应用中,我们通常使用JDBC(Java Database Connectivity)API来实现对数据库的操作,而ojdbc14.jar正是Oracle数据库对应的JDBC驱动。 JDBC是Java平台上的标准接口,它允许Java程序与各种数据库进行通信。...

Global site tag (gtag.js) - Google Analytics