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触发器是Oracle数据库中的一种机制,可以在数据库中执行特定的操作。在本文中,我们将介绍如何使用Oracle触发器调用Java程序。 一、加载Java程序 首先,我们需要将Java程序加载到...
总之,"Oracle触发器实时调用Java中HTTP接口"是一个数据库与应用程序实时通信的示例,涉及Oracle的触发器、存储过程和UTL_HTTP包,以及Java HTTP服务器的设计和实现。这样的设计需要对Oracle PL/SQL和Java网络编程有...
本篇文章将探讨如何在Oracle触发器中调用Java程序,以扩展数据库的功能并利用Java丰富的库资源。 首先,我们需要了解Oracle的PL/SQL(Procedural Language/Structured Query Language)语言,它是Oracle数据库内置...
Oracle 触发器调用 Java 类 Oracle 触发器是指在 Oracle 数据库中触发某些事件时执行的操作,例如插入、更新或删除数据。通过使用 Java 类,可以在触发器中执行更加复杂的操作。本文将介绍如何使用 Oracle 触发器...
Oracle触发器调用Java类是一种将业务逻辑扩展到数据库内部的方法,这在处理特定的数据操作时非常有用。本文档提供了一个具体的步骤示例,演示如何实现这一功能。 首先,我们需要将Java程序加载到Oracle数据库中。`...
本文将详细介绍如何在Oracle中调用Java包,并探讨相关知识点。 一、Oracle的Java存根(JDBC-JVM)集成 Oracle数据库内置了一个Java Virtual Machine (JVM),这使得它能够直接执行Java代码。通过Java存根(Java ...
2. **测试代码**:示例的Java代码,展示了如何从触发器调用Web服务。 3. **jar包**:可能包含必要的JDBC驱动和其他Java库,用于与Web服务交互。 整合这些组件,我们可以通过以下步骤实现: 1. 安装并配置JDK和...
总结起来,这个项目实现了将Java生成的二维码图片通过Oracle触发器转换为BLOB,并存储到数据库表中,这在需要在数据库中存储和检索二维码图像的场景下非常有用。同时,这也展示了Java和Oracle数据库的集成能力,以及...
4. **调用Java方法**:在触发器定义中嵌入Java PL/SQL块,通过`DBMS_JAVA`包调用Java方法执行Java代码。 5. **部署和测试**:将Java类编译为字节码(`.class`文件),然后将其加载到Oracle数据库中,最后测试触发器...
在Oracle调用Java的过程中,通常我们会编写Java程序作为数据库的存储过程或者触发器的一部分,然后通过PL/SQL调用这些Java代码。这个过程涉及到Oracle的JDBC(Java Database Connectivity)驱动,它允许Java应用程序...
JDBC KPRB主要用于存储过程、触发器等数据库内的Java程序,直接使用当前的数据库会话。 SQLJ是另一种方法,它是一个预编译器,能够将Java源代码中的嵌入式SQL语句转换为Java代码。它的运行机制类似于Oracle的其他...
【Oracle触发器后门隐藏技术】是网络安全领域中一种利用关系型数据库——Oracle数据库特性进行后门植入和隐藏的方法。这种技术尤其在云计算环境中,由于Oracle数据库的重要地位,成为研究的重点。后门,通常被称为...
11. **Java调用存储过程和存储函数**:Java开发者可以使用JDBC(Java Database Connectivity)API来调用Oracle的存储过程和函数,实现数据库操作。CallableStatement接口用于这个目的,允许传递参数并接收返回值。 ...
根据提供的文件信息,我们可以...通过以上介绍可以看出,存储过程、触发器和远程数据库连接都是Oracle数据库中非常重要的特性,它们可以帮助开发者更高效地管理数据、实现复杂的数据处理逻辑以及跨数据库访问等功能。
Oracle触发器是一种数据库对象,它会在特定的数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。触发器常用于实现数据完整性约束、业务规则或审计功能。创建触发器的语法如下: ```sql CREATE TRIGGER ...
Oracle 10G Java Programming是Oracle数据库在Java开发领域的核心主题,主要涵盖了如何在Oracle数据库环境中使用Java进行应用程序开发和数据库交互。Oracle 10G是Oracle数据库的第十个主要版本,它引入了许多对Java...
- 在Oracle数据库监听中,Java程序会启动一个ServerSocket,等待数据库通过Socket连接并发送数据变更信息。一旦接收到消息,Java方法可以解析这些信息,并执行相应的操作,如更新界面、处理业务逻辑等。 4. **具体...
Oracle中的Java存储过程是将Java代码与数据库紧密结合的一种技术,允许开发者在Oracle数据库内部执行Java程序,从而提高应用程序的性能和效率。这篇文章主要探讨了如何在Oracle 9i数据库环境中利用Java开发存储过程...
在Java程序中,我们通常使用JDBC(Java Database Connectivity)API来访问和操纵Oracle数据库。JDBC为Java开发者提供了一组接口和类,使得与各种数据库进行通信成为可能,包括Oracle。通过JDBC,Java代码可以执行PL/...
这篇博文主要总结了Java程序中与Oracle数据库交互的一些基本操作。通过`PersonCreditComplainDao.java`这个文件名,我们可以推测这是一个Java Dao(数据访问对象)类,它负责与数据库进行具体的交互。以下是关于Java...