oracle如何使用java source调用外部程序

来源:本网整理

String sql="update data_collection set 列1=‘值1

s">

oracle如何使用java source调用外部程序

作者:mellowsmile 字体:[增加 减小] 类型:转载 时间:2016-09-17 我要评论 这篇文章主要为大家介绍了oracle如何使用java source调用外部程序,感兴趣的小伙伴们可以参考一下 ">

需求

Oracle调用第三方外部程序。Oracle使用sqluldr2快速导出大批量数据,然后用winrar压缩后发送邮件。

这个是我自己写的一个例子,你看看:在命令窗口执行以下语句,创建自定义类型NESTEDARRAY。

源码

java source

oracle数据更新时触发java代码的步骤如下:1。编写JAVA程序public class

create or replace and compile java source named jv_run_extpro as import java.io.*; import java.lang.*; import java.util.*; import java.sql.*; import oracle.sql.*; publicclass jv_run_extpro { publicstaticvoid run(String cmd) throws IOException { Process p=Runtime.getRuntime().exec(cmd); StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "Error"); StreamGobbler outputGobbler = new StreamGobbler(p.getInputStream(), "Output"); errorGobbler.start(); outputGobbler.start(); try { p.waitFor(); } catch(InterruptedException ie) { System.out.println(ie); } } publicstaticclass StreamGobbler extends Thread { InputStream is; String type; public StreamGobbler(InputStream is, String type) { this.is = is; this.type = type; } publicvoid run() { try { InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) { if (type.equals("Error")) { System.out.println("Error :" + line); } else { System.out.println("Debug:" + line); } } } catch (IOException ioe) { ioe.printStackTrace(); } } } }

1、创建或者代替已有的目录。目录名为test_dir,路径为d:\的目录;2、使用bfile来创

存储过程

这个问题要先注意:oracle是不能用语句直接导出的,而常规的导出办法是用cmd的DOS命令来操作,

create or replace procedure pro_jv_run_extpro(p_cmd varchar2) as

9月21日消息,奥巴马承认:51区与外星人签有秘密契约。近日,外媒的一条报道轰动了全世界,美国总统奥巴马首次承认,美国51区与外星人签有秘密契约。各国领导人非常重视这件事,希望奥巴马能给出一个合理的解释,美国51区到底和外星人签订了什么契约?其目的是什么?带着这些疑问,记者采访了51区的工作人员。美国51区是一个位于美国内华达州南部林肯郡的一个区域,距离拉斯维加斯市中心西北方130公里,有一个空军基地在此,此区被认为是美国用来秘密进行新的空军飞行器的开发和测试的地方,这个地方也因为许多人相信它与众多的不明飞行物阴谋论有关而闻名事实上美国51区的确是在研究着全球不明物体,在51区的基地中,藏匿着

language java name 'jv_run_extpro.run(java.lang.String)';

现在城市养狗,狗狗天天和我们生活在同一屋檐下,所以很多主人都要把狗狗弄得干干净净的。一旦狗狗身上有了味道,很是影响日常生活。有些狗狗喜欢和人亲近,但是身上有味道被我们拒绝后,会有心理受伤的现象。但是有些狗狗的异味洗澡都不能消除掉,那该怎么办呢?一、狗儿体臭味道常见原因1、毛发长度相关如果没有经常洗澡,污垢没有立即洁净,当然就会有臭味散发。另外,若狗儿的毛发太长,即便有勤劳洗澡,可能会难以将皮肤污垢撤低清洁干净,于是就会有异味产生。2、年龄肤质导致正是青壮年的宠物犬只,其内分泌的质量相比较高些,部分油性肌肤的犬种会特别显著;当激素分泌太多,又加以环境条件湿润,许多的细菌就会孳生,细菌一旦分解,就

调用

周炜现在是在体制内发展,他是二炮文工团的团长,所以比较低调一点。周炜现在是第二炮兵政治部文工团团长,党员,国家一级演员,中国曲艺家协会理事会理事,中国文艺志愿者协会理事会理事,他曾经是唐杰忠的学生,后面又拜姜昆为师。周炜和姜昆一样都是体制内的,这些年来,他一直都在体制内发展,多次参加文化部举行的大型晚会,多次给领导人汇报演出,所以观众能看到他的演出机会还是挺少的。周炜由于他身份的原因,比较低调一点,不再是作为一个单纯的艺人出现在镜头面前,没有以前那么高调了。他现在主要就在央视的三套和七套活动,特别是央视三套的综艺节目,观众群体主要都是中老年人,经常可以看到周炜在这些综艺节目里当主持人或者是表演

begin pro_jv_run_extpro('sqluldr264.exe scott/hh@pdborcl query="select * from emp" field=, head=yes file=D:\Desktop\tmp\sqluldr2\OUT2.TXT'); pro_jv_run_extpro('"D:\Program Files\WinRAR\Rar.exe" a -ep -df "D:\Desktop\tmp\sqluldr2\20160916.rar" "D:\Desktop\tmp\sqluldr2\OUT2.TXT"'); end;

很多时候我们常常听到有人说——摄影,手机就够了,然后会给你看好多用手机拍摄的照片,你会觉得真不错。但真的是这样么?摄影帮助我们传达某个主题。我们要做的就是用过摄影技巧,来实现明确主题、突出主体、简化画面的目的。实现这个目的我们一般都通过:取景、曝光、虚实、构图,这四大法器。所以你的拍摄设备,不管是手机还是单反,都是要帮你在取景、曝光、虚实、构图这4个方面实现你的想法的。手机目前的问题就是在于无法全面实现对于取景、曝光、虚实、构图的控制。随着人们生活水平和生活品质的提升,更高的画质的要求,摄影已经成为一种潮流品质的趋势,销量自然上涨!所以咱们来说说手机的不足:1取景决定了你画面中的元素对于取景来

总结

Java source里StreamGobbler这个类不能少,用于异步读取命令的输出。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持突袭网。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

oracle中需要调用javasource 而javasource要操作该数据库下的表 应该怎么

建用户和授权要用DBA

最简单得建用户:

create user 用户名 identified by 密码

用户解锁 alter user 用户名 account unlock(不解锁无法登陆)

授权用 grant

建完用户首先要授权登陆权限

grant create session to 用户名

授权可以授权给角色和用户

也可以把角色授权给角色和用户

其他得类似 创建表得权限类似如下格式:

grant create table to 用户

java怎么调用oracle的过程

java下实现调用oracle的存储过程和函数

在oracle下创建一个test的账户,然后按一下步骤执行:

1.创建表:STOCK_PRICES

--创建表格

CREATE TABLE STOCK_PRICES(

RIC VARCHAR(6) PRIMARY KEY,

PRICE NUMBER(7,2),

UPDATED DATE );

2.插入测试数据:

--插入数据

INSERT INTO stock_prices values('1111',1.0,SYSDATE);

INSERT INTO stock_prices values('1112',2.0,SYSDATE);

INSERT INTO stock_prices values('1113',3.0,SYSDATE);

INSERT INTO stock_prices values('1114',4.0,SYSDATE);

3.建立一个返回游标: PKG_PUB_UTILS

--建立一个返回游标

CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS

--动态游标

TYPE REFCURSOR IS REF CURSOR;

END PKG_PUB_UTILS;

4.创建和存储过程:P_GET_PRICE

--创建存储过程

CREATE OR REPLACE PROCEDURE P_GET_PRICE

(

AN_O_RET_CODE OUT NUMBER,

AC_O_RET_MSG OUT VARCHAR2,

CUR_RET OUT PKG_PUB_UTILS.REFCURSOR,

AN_I_PRICE IN NUMBER

)

IS

BEGIN

AN_O_RET_CODE := 0;

AC_O_RET_MSG := '操作成功';

OPEN CUR_RET FOR

SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE;

EXCEPTION

WHEN OTHERS THEN

AN_O_RET_CODE := -1;

AC_O_RET_MSG := '错误代码:' || SQLCODE || CHR(13) || '错误信息:' || SQLERRM;

END P_GET_PRICE;

5.创建函数:

--创建函数:F_GET_PRICE

CREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER)

RETURN PKG_PUB_UTILS.REFCURSOR

AS

stock_cursor PKG_PUB_UTILS.REFCURSOR;

BEGIN

OPEN stock_cursor FOR

SELECT * FROM stock_prices WHERE price < v_price;

RETURN stock_cursor;

END;

6.JAVA调用存储过程返回结果集

代码示例:JDBCoracle10G_INVOKEPROCEDURE.java

import java.sql.*;

import oracle.jdbc.OracleCallableStatement;

import oracle.jdbc.OracleTypes;

/* 本例是通过调用oracle的存储过程来返回结果集:

* oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip

*/

public class JDBCoracle10G_INVOKEPROCEDURE {

Connection conn = null;

Statement statement = null;

ResultSet rs = null;

CallableStatement stmt = null;

String driver;

String url;

String user;

String pwd;

String sql;

String in_price;

public JDBCoracle10G_INVOKEPROCEDURE()

{

driver = "oracle.jdbc.driver.OracleDriver";

url = "jdbc:oracle:thin:@localhost:1521:ORCL";

// oracle 用户

user = "test";

// oracle 密码

pwd = "test";

init();

// mysid:必须为要连接机器的sid名称,否则会包以下错:

// java.sql.SQLException: Io 异常: Connection

// refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))

// 参考连接方式:

// Class.forName( "oracle.jdbc.driver.OracleDriver" );

// cn = DriverManager.getConnection(

// "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );

}

public void init() {

System.out.println("oracle jdbc test");

try {

Class.forName(driver);

System.out.println("driver is ok");

conn = DriverManager.getConnection(url, user, pwd);

System.out.println("conection is ok");

statement = conn.createStatement();

// conn.setAutoCommit(false);

// 输入参数

in_price = "3.0";

// 调用函数

stmt = conn.prepareCall("call P_GET_PRICE(?,?,?,?)");

stmt.registerOutParameter(1, java.sql.Types.FLOAT);

stmt.registerOutParameter(2, java.sql.Types.CHAR);

stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);

stmt.setString(4, in_price);

stmt.executeUpdate();

int retCode = stmt.getInt(1);

String retMsg = stmt.getString(2);

if (retCode == -1) { // 如果出错时,返回错误信息

System.out.println("报错!");

} else {

// 取的结果集的方式一:

rs = ((OracleCallableStatement) stmt).getCursor(3);

// 取的结果集的方式二:

// rs = (ResultSet) stmt.getObject(3);

String ric;

String price;

String updated;

// 对结果进行输出

while (rs.next()) {

ric = rs.getString(1);

price = rs.getString(2);

updated = rs.getString(3);

System.out.println("ric:" + ric + ";-- price:" + price

+ "; --" + updated + "; ");

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

System.out.println("close ");

}

}

public static void main(String args[])// 自己替换[]

{

new JDBCoracle10G_INVOKEPROCEDURE();

}

}

7.开发JAVA调用函数返回结果集

代码示例:JDBCoracle10G_INVOKEFUNCTION.java

import java.sql.*;

import oracle.jdbc.OracleCallableStatement;

import oracle.jdbc.OracleTypes;

/*

/* 本例是通过调用oracle的函数来返回结果集:

* oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip

*/

public class JDBCoracle10G_INVOKEFUNCTION {

Connection conn = null;

Statement statement = null;

ResultSet rs = null;

CallableStatement stmt = null;

String driver;

String url;

String user;

String pwd;

String sql;

String in_price;

public JDBCoracle10G_INVOKEFUNCTION()

{

driver = "oracle.jdbc.driver.OracleDriver";

url = "jdbc:oracle:thin:@localhost:1521:ORCL";

// oracle 用户

user = "test";

// oracle 密码

pwd = "test";

init();

// mysid:必须为要连接机器的sid名称,否则会包以下错:

// java.sql.SQLException: Io 异常: Connection

// refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))

// 参考连接方式:

// Class.forName( "oracle.jdbc.driver.OracleDriver" );

// cn = DriverManager.getConnection(

// "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );

}

public void init() {

System.out.println("oracle jdbc test");

try {

Class.forName(driver);

System.out.println("driver is ok");

conn = DriverManager.getConnection(url, user, pwd);

System.out.println("conection is ok");

statement = conn.createStatement();

// conn.setAutoCommit(false);

// 输入参数

in_price = "5.0";

// 调用函数

stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}");

// stmt.registerOutParameter(1, java.sql.Types.FLOAT);

// stmt.registerOutParameter(2, java.sql.Types.CHAR);

stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

stmt.setString(2, in_price);

stmt.executeUpdate();

// 取的结果集的方式一:

rs = ((OracleCallableStatement) stmt).getCursor(1);

// 取的结果集的方式二:

// rs = (ResultSet) stmt.getObject(1);

String ric;

String price;

String updated;

while (rs.next()) {

ric = rs.getString(1);

price = rs.getString(2);

updated = rs.getString(3);

System.out.println("ric:" + ric + ";-- price:" + price + "; --"

+ updated + "; ");

}

} catch (Exception e) {

e.printStackTrace();

} finally {

System.out.println("close ");

}

}

public static void main(String args[])// 自己替换[]

{

new JDBCoracle10G_INVOKEFUNCTION();

}

}

为什么在oracle中可以调用和执行java程序?

oralce安装的时候自带了jdk,你可以去安装目录里看看

如何在Oracle中使用Java存储过程

分享我的代码给你,这是最基本的版本,还有更好的

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

/**

* Load JDBC Driver

* 最基本的方法通过JDBC连接数据库

* @author Jacob

*

*/

public class LoadByPrimary {

public static void main(String[] args) throws ClassNotFoundException

{

String driver = "oracle.jdbc.OracleDriver";

Connection cn = null;

/**

* Class.forName手动加载一个类到方法区,Driver类中包含自动注册驱动的静态代码块

* 会自动在DriverManager中注册驱动

*/

Class.forName(driver);

String url = "jdbc:oracle:thin:@localhost:1521:ORACLE"; //1521代表端口号,默认的

String user = "用户名";

String pwd = "密码";

try

{

/*

* Connection是接口,返回值是一个引用对象,是Oracle驱动提供实现类ojdbc7.jar

* 使用JDBC API接口,实际上是驱动实现类

*/

cn = DriverManager.getConnection(url,user,pwd);

Statement stmt = cn.createStatement();

String sql = "SELECT * FROM stu_emp WHERE deptno =10";

ResultSet rs = stmt.executeQuery(sql);

while(rs.next())

{

System.out.println(rs.getInt("empno")+" "+

rs.getString("ename")+" "+

rs.getString("job"));

}

rs.close();

stmt.close();

}

catch (SQLException e)

{

e.printStackTrace();

}

finally

{

try

{

if(cn!=null)

{

cn.close();

}

}

catch (SQLException e2)

{

e2.printStackTrace();

}

}

}

}

这是通过preparedstatement实现更新数据,这里我把连接数据库的方法进行了封装,每次直接调用了。

public static void main(String[] args)

{

PreparedStatementDemo psd = new PreparedStatementDemo();

psd.updateSalary("JACOB",3000);

psd.selectSalary("JACOB");

}

public void updateSalary(String ename,double sal)

{

String sql = "Update stu_emp set sal= ? Where ename = ?";

Connection cn = null;

PreparedStatement ps = null;

try

{

cn = DBPUtil.getConnection();

ps = cn.prepareStatement(sql);

ps.setDouble(1, sal);

ps.setString(2, ename);

int num = ps.executeUpdate();

System.out.println("提示:总共有 "+num+" 条数据已经更新!");

}

catch (SQLException e)

{

e.printStackTrace();

}

finally

{

DBUtil.stmtClose(ps);

DBUtil.connClose(cn);

}

}

public void selectSalary(String name)

{

String sql = "Select * From stu_emp Where ename = ?";

Connection cn = null;

PreparedStatement ps = null;

ResultSet rs = null;

try

{

cn = DBPUtil.getConnection();

ps = cn.prepareStatement(sql);

ps.setString(1, name);

rs = ps.executeQuery();

while(rs.next())

{

System.out.println(rs.getString("ename")+" 的工资是: "+ rs.getInt("sal"));

}

}

catch (SQLException e)

{

e.printStackTrace();

}

finally

{

DBUtil.stmtClose(ps);

DBUtil.rsClose(rs);

DBUtil.connClose(cn);

}

}

}

oracle存储过程用过java 调用shell脚本问题 在线等

执行后有什么报错信息嘛?

我做过使用java procedure输出目录信息的,但是没弄过调用外部shell的程序。

  • 本文相关:
  • oracle 中 sqlplus命令大全
  • oracle 临时表详解及实例
  • Oracle批量导入文本文件快速的方法(sqlldr实现)
  • Redhat 6.2 下 oracle 11g R2的安装详解
  • Oracle数据库的启动和关闭顺序实例讲解
  • Oracle数据库中SQL语句的优化技巧
  • 利用函数返回oracle对象表的三种方法
  • ora-00119和ora-00132问题的解决方法
  • Oracle安装遇到INS-30131错误的解决方法
  • win x64下安装oracle 12c出现INS-30131报错的解决方法
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved