用Java代码创建Oracle触发器要怎么实现

用Java代码创建Oracle触发器要怎么实现,第1张

1、Java代码创建Oracle触发器

Java代码如下:

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()

}

}

create or replace and compilejava source named jym as

import java.io.BufferedReader

import java.io.InputStream

importjava.io.InputStreamReader

import java.io.OutputStream

import java.io.StringWriter

importjava.NET.InetSocketAddress

import java.net.Socket

import java.sql.Connection

import java.sql.DriverManager

importjava.sql.PreparedStatement

import java.sql.Statement

public class JYM {

public static  StringsendSynMsg(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 intobackdata(context) values(?)")

pr.setBytes(1, context)

pr.executeUpdate()

pr.close()

conn.close()

}

}

2、存储过程调用Java source

Sql代码

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

Sql代码

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

Sql代码

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')

execdbms_java.grant_permission('zhym','SYS:java.Net.SocketPermission','192.168.9.12:18002','connect,resolve')

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

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

final Timer machinetimer = new Timer()

machinetimer.schedule(new TimerTask() {

@Override

public void run() {

//定时执行的方法

XXXX()

}

}, 1000, 1000)

第一个 1000 代表系统运行后,这个定时任务多久会执行。

第二个 1000 代表每次执行间隔时间

如果有不懂的可以再来问我


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11618550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存