`
hy_zhym
  • 浏览: 15875 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

oracle触发器调用java程序

 
阅读更多

1、创建java程序:接收存储过程传递的参数,发送socket通信。

create or replace and compile java source named jym as
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class JYM {
	public static  String sendSynMsg(String ipAddr, byte[] datas) throws Exception{
		InetSocketAddress endpoint = new InetSocketAddress(ipAddr ,18002);
		Socket socket = null;
		OutputStream out = null;
		InputStream in = null;
		try	{
			socket = new Socket();
			socket.connect(endpoint);
			out = socket.getOutputStream();
			in =  socket.getInputStream();
			out.write(datas);
			out.flush();
			return null;
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch(Exception ex) {
					ex.printStackTrace();
				}
			}
			if (in != null) {
				try {
					in.close();
				} catch(Exception ex) {
					ex.printStackTrace();
				}
			}
			if (socket != null) {
				try {
					socket.close();
				} catch(Exception ex) {
					ex.printStackTrace();
				}
			}
		}
	}
	public static void say(String ip,byte[] context) throws Exception {
		String str=JYM.sendSynMsg(ip,context);   
		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.9.109:1521:orcl","zhym","jhhz621");  
		PreparedStatement pr=conn.prepareStatement("insert into backdata(context) values(?)");
		pr.setBytes(1, context);
		pr.executeUpdate();
		pr.close(); 
		conn.close();
	}
}

 2、存储过程调用java source

create or replace procedure socket(
ip varchar2,
context raw
)
as
language java name
'JYM.say(java.lang.String,byte[])';

 3、触发器调用存储过程

create or replace trigger todata_after
  after insert on todata
  for each row
begin
   socket('192.168.9.12',:new.context);
end todata_after;

 

 

代码写好后可以先用存储过程测试:

call  socket('192.168.9.12','023132');

 为了能在控制台中看见错误信息,要先运行下面3句话

set serveroutput on;
set serveroutput on size 5000;
call dbms_java.set_output(5000);

 

 

假如你运行存储过程时爆出了  请给用户复制权限的提示则按照提示在sysdba 下赋权限,如:

exec dbms_java.grant_permission('zhym','SYS:java.net.SocketPermission','192.168.9.12:18002','connect,resolve')

exec dbms_java.grant_permission('ZHYM','SYS:java.net.SocketPermission','127.0.0.1:1521','connect,resolve')

 

exec 后面的语句会在你的报错提示中打印出来,只要前面加exec就可以了。

 

分享到:
评论

相关推荐

    个人亲测oracle触发器调用java程序

    Oracle触发器调用Java程序 Oracle触发器是Oracle数据库中的一种机制,可以在数据库中执行特定的操作。在本文中,我们将介绍如何使用Oracle触发器调用Java程序。 一、加载Java程序 首先,我们需要将Java程序加载到...

    oracle 触发器实时调用java 中http接口

    总之,"Oracle触发器实时调用Java中HTTP接口"是一个数据库与应用程序实时通信的示例,涉及Oracle的触发器、存储过程和UTL_HTTP包,以及Java HTTP服务器的设计和实现。这样的设计需要对Oracle PL/SQL和Java网络编程有...

    Oracle触发器里调用Java程序

    本篇文章将探讨如何在Oracle触发器中调用Java程序,以扩展数据库的功能并利用Java丰富的库资源。 首先,我们需要了解Oracle的PL/SQL(Procedural Language/Structured Query Language)语言,它是Oracle数据库内置...

    oracle触发器调用java类.pdf

    Oracle 触发器调用 Java 类 Oracle 触发器是指在 Oracle 数据库中触发某些事件时执行的操作,例如插入、更新或删除数据。通过使用 Java 类,可以在触发器中执行更加复杂的操作。本文将介绍如何使用 Oracle 触发器...

    oracle触发器调用java类.docx

    Oracle触发器调用Java类是一种将业务逻辑扩展到数据库内部的方法,这在处理特定的数据操作时非常有用。本文档提供了一个具体的步骤示例,演示如何实现这一功能。 首先,我们需要将Java程序加载到Oracle数据库中。`...

    oracle调用java包

    本文将详细介绍如何在Oracle中调用Java包,并探讨相关知识点。 一、Oracle的Java存根(JDBC-JVM)集成 Oracle数据库内置了一个Java Virtual Machine (JVM),这使得它能够直接执行Java代码。通过Java存根(Java ...

    oracle触发器加载java文件访问webservice

    2. **测试代码**:示例的Java代码,展示了如何从触发器调用Web服务。 3. **jar包**:可能包含必要的JDBC驱动和其他Java库,用于与Web服务交互。 整合这些组件,我们可以通过以下步骤实现: 1. 安装并配置JDK和...

    oracle触发器实现二维码

    总结起来,这个项目实现了将Java生成的二维码图片通过Oracle触发器转换为BLOB,并存储到数据库表中,这在需要在数据库中存储和检索二维码图像的场景下非常有用。同时,这也展示了Java和Oracle数据库的集成能力,以及...

    使用Java编写Oracle触发器的实现.pdf

    4. **调用Java方法**:在触发器定义中嵌入Java PL/SQL块,通过`DBMS_JAVA`包调用Java方法执行Java代码。 5. **部署和测试**:将Java类编译为字节码(`.class`文件),然后将其加载到Oracle数据库中,最后测试触发器...

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

    在Oracle调用Java的过程中,通常我们会编写Java程序作为数据库的存储过程或者触发器的一部分,然后通过PL/SQL调用这些Java代码。这个过程涉及到Oracle的JDBC(Java Database Connectivity)驱动,它允许Java应用程序...

    Java连接Oracle数据库的各种方法

    JDBC KPRB主要用于存储过程、触发器等数据库内的Java程序,直接使用当前的数据库会话。 SQLJ是另一种方法,它是一个预编译器,能够将Java源代码中的嵌入式SQL语句转换为Java代码。它的运行机制类似于Oracle的其他...

    基于Oracle触发器的后门隐藏技术研究.pdf

    【Oracle触发器后门隐藏技术】是网络安全领域中一种利用关系型数据库——Oracle数据库特性进行后门植入和隐藏的方法。这种技术尤其在云计算环境中,由于Oracle数据库的重要地位,成为研究的重点。后门,通常被称为...

    Oracle教程,java调用oracle

    11. **Java调用存储过程和存储函数**:Java开发者可以使用JDBC(Java Database Connectivity)API来调用Oracle的存储过程和函数,实现数据库操作。CallableStatement接口用于这个目的,允许传递参数并接收返回值。 ...

    存储过程,触发器,远程数据库

    根据提供的文件信息,我们可以...通过以上介绍可以看出,存储过程、触发器和远程数据库连接都是Oracle数据库中非常重要的特性,它们可以帮助开发者更高效地管理数据、实现复杂的数据处理逻辑以及跨数据库访问等功能。

    Oracle存储过程、触发器

    Oracle触发器是一种数据库对象,它会在特定的数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。触发器常用于实现数据完整性约束、业务规则或审计功能。创建触发器的语法如下: ```sql CREATE TRIGGER ...

    Oracle 10G Java Programming

    Oracle 10G Java Programming是Oracle数据库在Java开发领域的核心主题,主要涵盖了如何在Oracle数据库环境中使用Java进行应用程序开发和数据库交互。Oracle 10G是Oracle数据库的第十个主要版本,它引入了许多对Java...

    oracle Socket监听数据库推送信息

    - 在Oracle数据库监听中,Java程序会启动一个ServerSocket,等待数据库通过Socket连接并发送数据变更信息。一旦接收到消息,Java方法可以解析这些信息,并执行相应的操作,如更新界面、处理业务逻辑等。 4. **具体...

    Oracle中基于Java的存储过程开发.pdf

    Oracle中的Java存储过程是将Java代码与数据库紧密结合的一种技术,允许开发者在Oracle数据库内部执行Java程序,从而提高应用程序的性能和效率。这篇文章主要探讨了如何在Oracle 9i数据库环境中利用Java开发存储过程...

    java-oracle中几十个实用的PLSQL.rar_Java plsql_oracle_oracle java_oracle

    在Java程序中,我们通常使用JDBC(Java Database Connectivity)API来访问和操纵Oracle数据库。JDBC为Java开发者提供了一组接口和类,使得与各种数据库进行通信成为可能,包括Oracle。通过JDBC,Java代码可以执行PL/...

    总结java程序中操作Oracle数据库的常用操作1

    这篇博文主要总结了Java程序中与Oracle数据库交互的一些基本操作。通过`PersonCreditComplainDao.java`这个文件名,我们可以推测这是一个Java Dao(数据访问对象)类,它负责与数据库进行具体的交互。以下是关于Java...

Global site tag (gtag.js) - Google Analytics