首页 > 编程语言 >建java存储过程

建java存储过程

时间:2023-07-19 18:03:09浏览次数:38  
标签:... 存储 java int OracleJavaProc SQL 过程 pstmt


作者:iihero

一、如何创建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/[email protected]已连接。
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/[email protected] -v -resolve Or
acleJavaProc.java
arguments: '-u' 'scott/[email protected] '-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:/[email protected]>loadjava -u scott -v -resolve Or
acleJavaProc/[email protected]: '-u' 'scott/[email protected]' '-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
全文完!

用法个人见解:不要手动drop java source, 不要手动drop procedure。

标签:...,存储,java,int,OracleJavaProc,SQL,过程,pstmt
From: https://blog.51cto.com/u_16193056/6778803

相关文章

  • @JavascriptInterface传过来键值对,Android这边用什么类型接收
    传输键值对给Android的JavascriptInterface概述在Android开发中,我们经常需要在JavaScript和Java之间传输数据。一种常见的方式是通过使用@JavascriptInterface注解将Java方法暴露给JavaScript调用。这种方式可以实现双向通信,并且非常灵活。本文将介绍如何使用@JavascriptInterfac......
  • java书籍
    看见大家这多大家的踊跃发言,我这里澄清一下,这里给出的书籍主要侧重于软件设计和管理方面,特别是软件设计,说句废话,看完这些书并不代表懂得软件设计,而在于应用,那你将和里面很多观点产生共鸣,理解其中的一些奥妙。这里所选的书籍不敢说是最好的,但是保证这些书籍的书写都是严谨的,理论都是......
  • <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEnc
    实现<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1"pageEnc的步骤为了帮助这位刚入行的小白实现<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1"pageEnc,我们需要按照以下步骤进行操作:步骤操作1创建一个......
  • .Net 对RSA加密结果跟JAVA加密结果不一致问题处理
    stringpublicRsaKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6UCsvO/M/Q51ydlxvuvwy8W9yXkAWLLiG5eA2Duha9cr/XoWrQcETf7PRMNYaQs616PGhj0tnPfxfDltmeqTJQf8rHNxevIZ9nQ0N0/8PIlVszubpMyAHnEis2OLMnLENGyepAlabFGDMDPzRpf0ibL0Q/R15BuTzII5gunzAbwIDAQAB";stri......
  • Android开发RXJava
    Android开发RXJava实现流程下面是实现"Android开发RXJava"的流程表格:步骤描述1导入RxJava库2创建Observable对象3创建Observer对象4使用subscribe()方法订阅Observable和Observer下面将详细介绍每个步骤需要做的事情以及对应的代码和注释。步骤1:导入R......
  • 记录Arthas在一次性能调优过程中实践
    背景 使用jmeter对系统进行压力测试,该业务流程请求大致调用:jmeter压力机——> A系统 ——> B系统——>A系统.  A系统作为基础平台,请求先到A系统,然后转到具体的B业务系统,B接口逻辑中需要调用A系统查询基础数据。问题描述 当使用高并发访问系统时,整个系统卡住......
  • JAVA 内部类
    Java类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类。根据定义的方式不同,内部类分为静态内部类,成员内部类,局部内部类,匿名内部类四种。 静态内部类定义在类内部的静态类,就是静态内部类。1publicclassOut{2privatestaticinta;3......
  • 对象存储、文件存储、块存储
    转自https://cloud.tencent.com/developer/article/2147181?shareByChannel=link并进行部分修改什么是文件存储?文件存储带有文件系统,主要是以文件的形式存放数据,能将所有的目录、文件形成一个有层次的树形结构来管理,通过“树”不断伸展的枝丫就能找到你需要的文件。存储协议主......
  • Java 默认构造
    Java默认构造方法的实现作为一名经验丰富的开发者,你将帮助一位刚入行的小白了解如何实现Java中的默认构造方法。在本篇文章中,我们将按照以下步骤来进行讲解:创建一个Java类添加默认构造方法编写构造方法的代码逻辑让我们一步一步地来实现这些步骤。1.创建一个Java类首先,......
  • Java 两个字符串相加
    Java两个字符串相加作为一名经验丰富的开发者,我很乐意教你如何实现“Java两个字符串相加”。下面我将详细介绍这个过程,并提供每个步骤所需的代码和注释。过程概述下面是实现“Java两个字符串相加”的步骤概览:步骤描述1创建两个字符串变量2输入两个待相加的字......