zoukankan      html  css  js  c++  java
  • oracle触发器调用java程序

    1、创建java程序:接收存储过程传递的参数,发送socket通信。  
    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 
    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;   
    代码写好后可以先用存储过程测试:
    Sql代码  
    call  socket('192.168.9.12','023132');   
     为了能在控制台中看见错误信息,要先运行下面3句话  
    set serveroutput on;   
    set serveroutput on size 5000;   
    call dbms_java.set_output(5000);  
    假如你运行存储过程时爆出了  请给用户复制权限的提示则按照提示在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就可以了。
  • 相关阅读:
    简单的几句接口调用,完美完成缩短网站
    nodejs语言实现验证码生成功能
    人工智能:文本相似度分析
    SolrCloud 5.2.1 installation and configuration
    借鉴DP思想: HouseRobberIII
    有意思的数学题:Trapping Rain Water
    API认证方法一览
    FE: Responsive Web Design Overview
    FE: Sass and Bootstrap 3 with Sass
    假期小记:14年寒假二三四事(儿)
  • 原文地址:https://www.cnblogs.com/xinxin1994/p/5990200.html
Copyright © 2011-2022 走看看