收藏 分销(赏)

oracle存储过程调用java-class类.doc

上传人:仙人****88 文档编号:9457380 上传时间:2025-03-27 格式:DOC 页数:8 大小:37.50KB
下载 相关 举报
oracle存储过程调用java-class类.doc_第1页
第1页 / 共8页
oracle存储过程调用java-class类.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述
oracle存储过程调用java class 文章分类:Java编程 一、如何创建java存储过程? 通常有三种方法来创建java存储过程。 1. 使用oracle的sql语句来创建: e.g. 使用create or replace and compile java source named "<name>" as        后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。 SQL> create or replace and compile java source named "javademo1"   2  as   3  import java.sql.*;   4  public class JavaDemo1   5  {   6  public static void main(String[] argv)   7  {   8  System.out.println("hello, java demo1");   9  } 10  } 11  / Java 已创建。 SQL> show errors java source "javademo1" 没有错误。 SQL> create or replace procedure javademo1   2  as   3  language java name ''JavaDemo1.main(java.lang.String[])'';   4  / 过程已创建。 SQL> set serveroutput on SQL> call javademo1(); 调用完成。 SQL> call dbms_java.set_output(5000); 调用完成。 SQL> call javademo1(); hello, java demo1 调用完成。 SQL> call javademo1(); hello, java demo1 调用完成。 2. 使用外部class文件来装载创建 e.g. 这里既然用到了外部文件,必然要将class文件放到oracle Server的某一目录下边。 public class OracleJavaProc {     public static void main(String[] argv)     {         System.out.println("It''s a Java Oracle procedure.");     } } SQL> grant create any directory to scott; 授权成功。 SQL> conn scott/tiger@iihero.oracledb 已连接。 SQL> create or   replace   directory   test_dir   as  ''d:\oracle''; 目录已创建。 SQL> create or replace java class using bfile(test_dir, 'OracleJavaProc.class')   2  / Java 已创建。 SQL> create or replace procedure testjavaproc as language java name ''OracleJavaProc.main(java.lang.String[])'';   2  / 过程已创建。 SQL> call testjavaproc(); 调用完成。 SQL> execute testjavaproc; PL/SQL 过程已成功完成。 SQL> set serveroutput on size 5000 SQL> call dbms_java.set_output(5000); 调用完成。 SQL> execute testjavaproc; It''s a Java Oracle procedure. 3. 我推荐的一种方法,直接使用loadjava命令远程装载并创建。     先创建一个类, e.g. import java.sql.*; import oracle.jdbc.*; public class OracleJavaProc ...{    //Add a salgrade to the database.    public static void addSalGrade(int grade, int losal, int hisal) ...{       System.out.println("Creating new salgrade for EMPLOYEE...");       try ...{          Connection conn =             DriverManager.getConnection("jdbc:default:connection:");          String sql =             "INSERT INTO salgrade " +             "(GRADE,LOSAL,HISAL) " +             "VALUES(?,?,?)";          PreparedStatement pstmt = conn.prepareStatement(sql);          pstmt.setInt(1,grade);          pstmt.setInt(2,losal);          pstmt.setInt(3,hisal);          pstmt.executeUpdate();          pstmt.close();          }       catch(SQLException e) ...{          System.err.println("ERROR! Adding Salgrade: "            + e.getMessage());          }    } } 使用loadjava命令将其装载到服务器端并编译: D:eclipse3.1workspacedbtest>loadjava -u scott/tiger@iihero.oracledb -v -resolve Or acleJavaProc.java arguments: ''-u'' ''scott/tiger@iihero.oracledb ''-v'' ''-resolve'' ''OracleJavaProc.java'' creating : source OracleJavaProc loading  : source OracleJavaProc resolving: source OracleJavaProc 查询一下状态: 连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production SQL> SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE ''JAVA%''; OBJECT_NAME -------------------------------------------------------------------------------- OBJECT_TYPE                          STATUS ------------------------------------ -------------- OracleJavaProc JAVA CLASS                           VALID OracleJavaProc JAVA SOURCE                          VALID 测试一下存储过程: SQL> create or replace procedure add_salgrade(id number, losal number, hisal num ber) as language java name ''OracleJavaProc.addSalGrade(int, int, int)'';   2  / 过程已创建。 SQL> set serveroutput on size 2000 SQL> call dbms_java.set_output(2000); 调用完成。 SQL> execute add_salgrade(6, 10000, 15000); Creating new salgrade for EMPLOYEE... PL/SQL 过程已成功完成。 SQL> select * from salgrade where grade=6;      GRADE      LOSAL      HISAL ---------- ---------- ----------          6      10000      15000 二、如何更新你已经编写的java存储过程?  假如要往类OracleJavaProc里添加一个存储过程方法,如何开发? 正确的步骤应该是先dropjava, 改程序,再loadjava。 e.g.修改OracleJavaProc类内容如下: import java.sql.*; import oracle.jdbc.*; public class OracleJavaProc ...{    // Add a salgrade to the database.    public static void addSalGrade(int grade, int losal, int hisal) ...{       System.out.println("Creating new salgrade for EMPLOYEE...");       try ...{          Connection conn =             DriverManager.getConnection("jdbc:default:connection:");          String sql =             "INSERT INTO salgrade " +             "(GRADE,LOSAL,HISAL) " +             "VALUES(?,?,?)";          PreparedStatement pstmt = conn.prepareStatement(sql);          pstmt.setInt(1,grade);          pstmt.setInt(2,losal);          pstmt.setInt(3,hisal);          pstmt.executeUpdate();          pstmt.close();          }       catch(SQLException e) ...{          System.err.println("ERROR! Adding Salgrade: "            + e.getMessage());          }    }       public static int getHiSal(int grade)    ...{     try ...{         Connection conn =           DriverManager.getConnection("jdbc:default:connection:");         String sql = "SELECT hisal FROM salgrade WHERE grade = ?";         PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, grade);         ResultSet rset = pstmt.executeQuery();         int res = 0;         if (rset.next())         ...{             res = rset.getInt(1);         }         rset.close();         return res;        }     catch (SQLException e)     ...{         System.err.println("ERROR! Querying Salgrade: "            + e.getMessage());           return -1;     }       }       } 如何更新呢? D:eclipse3.1workspacedbtest>dropjava -u scott -v OracleJavaProc D:/tiger@iihero.oracledbeclipse3.1workspacedbtest>loadjava -u scott -v -resolve Or acleJavaProc/tiger@iihero.oracledb.java arguments: ''-u'' ''scott/tiger@iihero.oracledb'' ''-v'' ''-resolve'' ''OracleJavaProc.java'' creating : source OracleJavaProc loading  : source OracleJavaProc resolving: source OracleJavaProc 后边的应用示例: SQL> create or replace function query_hisal(grade number) return number as langu age java name ''OracleJavaProc.getHiSal(int) return int'';   2  / 函数已创建。 SQL> set serveroutput on size 2000 SQL> call dbms_java.set_output(2000); 调用完成。 SQL> select query_hisal(5) from dual; QUERY_HISAL(5) --------------           9999
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服