`
jin8000608172
  • 浏览: 136508 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java调用sqlplus执行定制的sql脚本

阅读更多
package com.sky.read;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class PLSQL {

public static void main(String[] args) {
FileOutputStream fos = null;
InputStream in = null;
Process p=null;
try {
String cmd = "sqlplus gts1031/gts1031@ORACL @init-6.0.01.sql >D:/gts1031.log";
Runtime rt = Runtime.getRuntime();
p = rt.exec(cmd,null,new File("D:/db/integrate/"));
in = p.getInputStream();
fos = new FileOutputStream("D:/gts1031.log");
byte[] b = new byte[1024];
int br = 0;
while ((br = in.read(b)) != -1) {
fos.write(b, 0, br);
}
p.waitFor();
System.out.println("执行结束");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}

}
}

}
p = rt.exec(cmd,null,new File("D:/db/integrate/"));
new File(D:/db/integrate/)指定了子进程的工作目录,这样sql脚本里的引用其他文件是就可以使用相对路径.相当于在cmd下,切换到相映脚本的目录,再执行sqlplus,这样sqlplus执行的sql脚本中引用其他文件时可以使用相对路径
package com.sky.read;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class PLSQL {

public static void main(String[] args) {
new PLSQL().exeSqlplus("gts1031", "gts1031", "ORACL",
"init-6.0.01.sql", "D:/db/integrate/", "D:/DBLOGS/",
"gts1031.log");
}

public void exeSqlplus(String username, String password, String host,
String fileName, String dir, String logdir, String logFileName) {
FileOutputStream fos = null;
InputStream in = null;
Process p = null;
try {
StringBuffer sb = new StringBuffer();
sb.append("sqlplus ");
sb.append(username);
sb.append("/");
sb.append(password);
sb.append("@");
sb.append(host);
sb.append(" @");
sb.append(fileName);
// String cmd =
// "sqlplus gts1031/gts1031@ORACL @init-6.0.01.sql >D:/gts1031.log";
String cmd = sb.toString();
Runtime rt = Runtime.getRuntime();
// p = rt.exec(cmd,null,new File("D:/db/integrate/"));
p = rt.exec(cmd, null, new File(dir));
in = p.getInputStream();
File file = new File(logdir);
if (!file.exists()) {
file.mkdir();
}
// fos = new FileOutputStream("D:/gts1031.log");
fos = new FileOutputStream(logdir + logFileName);
byte[] b = new byte[512];
int br = 0;
while ((br = in.read(b)) != -1) {
String str = new String(b, 0, br);
int i = str.indexOf("SP2-0310");
int j = str.indexOf("SQL>");
fos.write(b, 0, br);
if (i != -1) {
p.destroy();
System.out.println("执行中断:" + str);
}
if (j != -1) {
p.destroy();
System.out.println("成功执行");
}
}
p.waitFor();
fos.flush();
fos.close();
in.close();
p.destroy();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}

}
}
}
分享到:
评论

相关推荐

    Java Sql 格式化工具

    Sqlplus developer 的sql格式化工具提取。及使用教程。

    给oracle的sqlplus安装更齐全的help文档(help.sql文件和安装方法)

    以system身份登录sqlplus,再执行安装脚本helpbld.sql或hlpbld.sql均可。我们在执行脚本的时候需要输入两个参数 SQL> @?/sqlplus/admin/help/helpbld.sql 输入 1 的值: $ORACLE_HOME/sqlplus/admin/help --帮助...

    sqlplus命令的使用大全

    1. 执行一个SQL脚本文件 SQL>start file_name SQL>@ file_name 我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 @与@@...

    Oracle基础:通过sqlplus执行sql语句后的结果进行判断

    在sqlplus中执行sql语句,如果直接使用命令行的方式调用时会碰到两个问题: 问题1: 需要进行交互性的输入 问题2:结果的判断不能通过返回值来确认 解决方式 在脚本调用里,解决方式如下 问题1可以通过前文提到的...

    Oracle数据库执行脚本常用命令小结

    1. 执行一个SQL脚本文件 代码如下: sqlplus user/pass@servicename<file>start file_names 或 代码如下: SQL>@ file_name 我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句...

    向shell或者sql脚本传参或接收参数的方法

    .向shell中传参数的方法,后面是...3.通过shell调用sql脚本,并向其中传参数的方法: echo "@a.sql $1"|sqlplus $1/$2 4.sql脚本接收参数的方法 define v_str=&1 begin p_insert_log('test','&v_str'); end; /

    Oracle SqlPlus设置Login.sql的技巧

    sqlplus在启动时会自动运行两个脚本:glogin.sql、login.sql这两个文件 ...可以在login.sql文件中加入一些常用设置使用SQLPLUS时更便捷,以下试验在ORACLE 11.2.0.1.0上进行 默认$ORACLE_HOME/sqlplus/admin路径下存在gl

    oracle sqlplus 中spool 的使用

    oracle sqlplus 中spool 的使用:要自己写程序进行Oracle导出SQL脚本,执行一段SQL,让SQL查询结果就是我们想要的SQL脚本.

    SQLPLUS命令的使用大全

    两天写几个oracle日常维护的常用脚本,N多sqlplus命令看不明白,这个“SQL*PLUS命令的使用大全”帮了不少忙。 -------------------------------------------------------------------------------------------------...

    SQLPLUS 常用指令收集与技巧

    SQLPLUS 常用指令收集与技巧, 改文档中列举了sql脚本中使用的各种sqlplus命令技巧,在编写shell时很有用

    学生成绩管理系统Oracle全部SQL语句.txt

    3、要求使用sqlplus,pl/sql或developer建立存储过程,触发器和程序包等代码,其中要求用到游标,异常,各种语句等对表中数据进行处理; 4、使用自己熟悉的开发语言,加入界面,连接数据库; 5、报告要有操作截图...

    Shell脚本连接oracle数据库的实现代码

    最近研究了一下怎样使用shell 脚本连接数据库,然后执行查询语句。这样对于需要定时执行的脚本,我们可以建个 crontab 去定时执行。 先介绍一下客户端的安装: linux 环境需要用 sqlplus 客户端去连接oracle 数据库...

    SqlPlusScript:在Oracle SQLPlus中使用的通用脚本-开源

    SqlPlusScript是Oracle数据库的通用SQL脚本集,旨在在Oracle SQLPlus中执行。 项目目标:提供一个舒适的环境来在Oracle SQLPlus中工作,与在数据库中工作的GUI应用程序不同,在功能上可比并且持续使用时效率更高。 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    使用shell定制addm脚本

     可以使用如下的脚本来定制addm,能够根据快照生成指定的addm报告。  脚本的内容如下:  相比于定制awr,ash要略微有一些难度。对于addm目前只提供了文本格式的内容,所以格式的处理上没什么特别的地方,不用...

    SQLPLUS配置和使用

    该文档主要是整理结合了 SQL Plus的使用和安装,对比了SQL命令和SQL*Plus 命令的相似和不同,对 SQL Plus的格式化输出用脚本文件来进行交互

    Oracle导出excel数据

    使用sqlplus需要两个文件:sql脚本文件和格式设置文件。 去除冗余信息,main.sql --main.sql 注意,需要在sqlplus下运行 非plsql命令行下 set linesize 200 set term off verify off feedback off pagesize 999 ...

    最全的Oracle中文使用手册

    set NLS_LANG=american_america.us7ascii ( 设置编码才可以使用下面脚本) cd $ORACLE_HOME/rdbms cd demo summit2.sql ********************************* 我们目前使用的是 oralce 9i 9201 版本 select * from v...

Global site tag (gtag.js) - Google Analytics