search
HomeDatabaseMysql Tutorial如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)Jun 07, 2016 pm 03:01 PM
javaoracleusestorageDetailed explanationprocess

其实,这篇短文,我早就应该写了。因为,java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。 iihero on csdn) 一、如何创建java存储过程? 通常有三种方法来创建java存储过程。 1. 使用o

其实,这篇短文,我早就应该写了。因为,java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。
iihero  on csdn)

一、如何创建java存储过程?
通常有三种方法来创建java存储过程。

1. 使用oracle的sql语句来创建:

e.g. 使用create or replace and compile java source named "" as
       后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。

如何在Oracle中使用Java存储过程 (详解)SQL> create or replace and compile java source named "javademo1"
如何在Oracle中使用Java存储过程 (详解)  
2  as
如何在Oracle中使用Java存储过程 (详解)  
3  import java.sql.*;
如何在Oracle中使用Java存储过程 (详解)  
4  public class JavaDemo1
如何在Oracle中使用Java存储过程 (详解)  
5  {
如何在Oracle中使用Java存储过程 (详解)  
6  public static void main(String[] argv)
如何在Oracle中使用Java存储过程 (详解)  
7  {
如何在Oracle中使用Java存储过程 (详解)  
8  System.out.println("hello, java demo1");
如何在Oracle中使用Java存储过程 (详解)  
9  }
如何在Oracle中使用Java存储过程 (详解) 
10  }
如何在Oracle中使用Java存储过程 (详解) 
11  /
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)Java 已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> show errors java source "javademo1"
如何在Oracle中使用Java存储过程 (详解)没有错误。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> create or replace procedure javademo1
如何在Oracle中使用Java存储过程 (详解)  
2  as
如何在Oracle中使用Java存储过程 (详解)  
3  language java name 'JavaDemo1.main(java.lang.String[])';
如何在Oracle中使用Java存储过程 (详解)  
4  /
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)过程已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> set serveroutput on
如何在Oracle中使用Java存储过程 (详解)SQL
> call javademo1();
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> call dbms_java.set_output(5000);
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> call javademo1();
如何在Oracle中使用Java存储过程 (详解)hello, java demo1
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> call javademo1();
如何在Oracle中使用Java存储过程 (详解)hello, java demo1
如何在Oracle中使用Java存储过程 (详解)调用完成。

2. 使用外部class文件来装载创建
e.g. 这里既然用到了外部文件,必然要将class文件放到oracle Server的某一目录下边。

如何在Oracle中使用Java存储过程 (详解)public class OracleJavaProc
如何在Oracle中使用Java存储过程 (详解){
如何在Oracle中使用Java存储过程 (详解)    
public static void main(String[] argv)
如何在Oracle中使用Java存储过程 (详解)    {
如何在Oracle中使用Java存储过程 (详解)        System.out.println("It
's a Java Oracle procedure.");
如何在Oracle中使用Java存储过程 (详解)    }
如何在Oracle中使用Java存储过程 (详解)}
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> grant create any directory to scott;
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)授权成功。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> conn scott/tiger@iihero.oracledb
如何在Oracle中使用Java存储过程 (详解)已连接。
如何在Oracle中使用Java存储过程 (详解)SQL> create or   replace   directory   test_dir   as  
'd:/oracle';
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)目录已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> create or replace java class using bfile(test_dir, 
'OracleJavaProc.CLASS')
如何在Oracle中使用Java存储过程 (详解)  2  /
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)Java 已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> create or replace procedure testjavaproc as language java name 
'OracleJavaProc.main(java.lang.String[])';
如何在Oracle中使用Java存储过程 (详解)  2  /
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)过程已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> call testjavaproc();
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> execute testjavaproc;
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)PL/SQL 过程已成功完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> set serveroutput on size 5000
如何在Oracle中使用Java存储过程 (详解)SQL> call dbms_java.set_output(5000);
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL> execute testjavaproc;
如何在Oracle中使用Java存储过程 (详解)It
's a Java Oracle procedure.

3. 我推荐的一种方法,直接使用loadjava命令远程装载并创建。
    先创建一个类, e.g.

如何在Oracle中使用Java存储过程 (详解)import java.sql.*;
如何在Oracle中使用Java存储过程 (详解)
import oracle.jdbc.*;
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)
public class OracleJavaProc ...{
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)   
//Add a salgrade to the database.
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)
   public static void addSalGrade(int grade, int losal, int hisal) ...{
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)      System.out.println(
"Creating new salgrade for EMPLOYEE...");
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)      
try ...{
如何在Oracle中使用Java存储过程 (详解)         Connection conn 
=
如何在Oracle中使用Java存储过程 (详解)            DriverManager.getConnection(
"jdbc:default:connection:");
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)         String sql 
=
如何在Oracle中使用Java存储过程 (详解)            
"INSERT INTO salgrade " +
如何在Oracle中使用Java存储过程 (详解)            
"(GRADE,LOSAL,HISAL) " +
如何在Oracle中使用Java存储过程 (详解)            
"VALUES(?,?,?)";
如何在Oracle中使用Java存储过程 (详解)         PreparedStatement pstmt 
= conn.prepareStatement(sql);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
1,grade);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
2,losal);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
3,hisal);
如何在Oracle中使用Java存储过程 (详解)         pstmt.executeUpdate();
如何在Oracle中使用Java存储过程 (详解)         pstmt.close();
如何在Oracle中使用Java存储过程 (详解)         }

如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)      
catch(SQLException e) ...{
如何在Oracle中使用Java存储过程 (详解)         System.err.println(
"ERROR! Adding Salgrade: " 
如何在Oracle中使用Java存储过程 (详解)           
+ e.getMessage());
如何在Oracle中使用Java存储过程 (详解)         }

如何在Oracle中使用Java存储过程 (详解)   }

如何在Oracle中使用Java存储过程 (详解)}

使用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

查询一下状态:

如何在Oracle中使用Java存储过程 (详解)连接到:
如何在Oracle中使用Java存储过程 (详解)Oracle9i Enterprise Edition Release 
9.2.0.1.0 - Production
如何在Oracle中使用Java存储过程 (详解)
With the Partitioning, OLAP and Oracle Data Mining options
如何在Oracle中使用Java存储过程 (详解)JServer Release 
9.2.0.1.0 - Production
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE 'JAVA%';
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)
OBJECT_NAME
如何在Oracle中使用Java存储过程 (详解)
--------------------------------------------------------------------------------
如何在Oracle中使用Java存储过程 (详解)

如何在Oracle中使用Java存储过程 (详解)OBJECT_TYPE                          STATUS
如何在Oracle中使用Java存储过程 (详解)
------------------------------------ --------------
如何在Oracle中使用Java存储过程 (详解)
OracleJavaProc
如何在Oracle中使用Java存储过程 (详解)JAVA CLASS                           VALID
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)OracleJavaProc
如何在Oracle中使用Java存储过程 (详解)JAVA SOURCE                          VALID

测试一下存储过程:

如何在Oracle中使用Java存储过程 (详解)SQL> create or replace procedure add_salgrade(id number, losal number, hisal num
如何在Oracle中使用Java存储过程 (详解)ber) 
as language java name 'OracleJavaProc.addSalGrade(int, int, int)';
如何在Oracle中使用Java存储过程 (详解)  
2  /
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)过程已创建。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> set serveroutput on size 2000
如何在Oracle中使用Java存储过程 (详解)SQL
> call dbms_java.set_output(2000);
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)调用完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> execute add_salgrade(61000015000);
如何在Oracle中使用Java存储过程 (详解)Creating new salgrade 
for EMPLOYEE...
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)PL
/SQL 过程已成功完成。
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)SQL
> select * from salgrade where grade=6;
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)     GRADE      LOSAL      HISAL
如何在Oracle中使用Java存储过程 (详解)
---------- ---------- ----------
如何在Oracle中使用Java存储过程 (详解)
         6      10000      15000

 

二、如何更新你已经编写的java存储过程?  

假如要往类OracleJavaProc里添加一个存储过程方法,如何开发?
正确的步骤应该是先dropjava, 改程序,再loadjava。

e.g.修改OracleJavaProc类内容如下:

如何在Oracle中使用Java存储过程 (详解)import java.sql.*;
如何在Oracle中使用Java存储过程 (详解)
import oracle.jdbc.*
;
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)
public class OracleJavaProc ...
{
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)   
// Add a salgrade to the database.

如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)
   public static void addSalGrade(int grade, int losal, int hisal) ...{
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)      System.out.println(
"Creating new salgrade for EMPLOYEE..."
);
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)      
try ...
{
如何在Oracle中使用Java存储过程 (详解)         Connection conn 
=

如何在Oracle中使用Java存储过程 (详解)            DriverManager.getConnection(
"jdbc:default:connection:");
如何在Oracle中使用Java存储过程 (详解)
如何在Oracle中使用Java存储过程 (详解)         String sql 
=

如何在Oracle中使用Java存储过程 (详解)            
"INSERT INTO salgrade " +
如何在Oracle中使用Java存储过程 (详解)            
"(GRADE,LOSAL,HISAL) " +
如何在Oracle中使用Java存储过程 (详解)            
"VALUES(?,?,?)";
如何在Oracle中使用Java存储过程 (详解)         PreparedStatement pstmt 
=
 conn.prepareStatement(sql);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
1
,grade);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
2
,losal);
如何在Oracle中使用Java存储过程 (详解)         pstmt.setInt(
3
,hisal);
如何在Oracle中使用Java存储过程 (详解)         pstmt.executeUpdate();
如何在Oracle中使用Java存储过程 (详解)         pstmt.close();
如何在Oracle中使用Java存储过程 (详解)         }

如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)      
catch(SQLException e) ...{
如何在Oracle中使用Java存储过程 (详解)         System.err.println(
"ERROR! Adding Salgrade: "
 
如何在Oracle中使用Java存储过程 (详解)           
+
 e.getMessage());
如何在Oracle中使用Java存储过程 (详解)         }

如何在Oracle中使用Java存储过程 (详解)   }

如何在Oracle中使用Java存储过程 (详解)   
如何在Oracle中使用Java存储过程 (详解)   
public static int getHiSal(int grade)
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)   
...
{
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)    
try ...
{
如何在Oracle中使用Java存储过程 (详解)        Connection conn 
=

如何在Oracle中使用Java存储过程 (详解)          DriverManager.getConnection(
"jdbc:default:connection:");
如何在Oracle中使用Java存储过程 (详解)        String sql 
= "SELECT hisal FROM salgrade WHERE grade = ?"
;
如何在Oracle中使用Java存储过程 (详解)        PreparedStatement pstmt 
=
 conn.prepareStatement(sql);pstmt.setInt(1, grade);
如何在Oracle中使用Java存储过程 (详解)        ResultSet rset 
=
 pstmt.executeQuery();
如何在Oracle中使用Java存储过程 (详解)        
int res = 0
;
如何在Oracle中使用Java存储过程 (详解)        
if
 (rset.next())
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)        
...
{
如何在Oracle中使用Java存储过程 (详解)            res 
= rset.getInt(1
);
如何在Oracle中使用Java存储过程 (详解)        }

如何在Oracle中使用Java存储过程 (详解)        rset.close();
如何在Oracle中使用Java存储过程 (详解)        
return res;

       }
如何在Oracle中使用Java存储过程 (详解)    
catch
 (SQLException e) 
如何在Oracle中使用Java存储过程 (详解)如何在Oracle中使用Java存储过程 (详解)    
...
{
如何在Oracle中使用Java存储过程 (详解)        System.err.println(
"ERROR! Querying Salgrade: "
 
如何在Oracle中使用Java存储过程 (详解)           
+
 e.getMessage());
          return -1;
如何在Oracle中使用Java存储过程 (详解)    }
    
如何在Oracle中使用Java存储过程 (详解)   }

如何在Oracle中使用Java存储过程 (详解)      
如何在Oracle中使用Java存储过程 (详解)}

如何更新呢?

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 numberreturn 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(5from
 dual;

QUERY_HISAL(
5
)
--------------

          9999

全文完!

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



Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
oracle怎么查询所有索引oracle怎么查询所有索引May 13, 2022 pm 05:23 PM

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

什么是oracle asm什么是oracle asmApr 18, 2022 pm 04:16 PM

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

oracle全角怎么转半角oracle全角怎么转半角May 13, 2022 pm 03:21 PM

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

Oracle怎么查询端口号Oracle怎么查询端口号May 13, 2022 am 10:10 AM

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

oracle怎么删除sequenceoracle怎么删除sequenceMay 13, 2022 pm 03:35 PM

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

oracle怎么查询数据类型oracle怎么查询数据类型May 13, 2022 pm 04:19 PM

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

oracle查询怎么不区分大小写oracle查询怎么不区分大小写May 10, 2022 pm 05:45 PM

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

Oracle怎么修改sessionOracle怎么修改sessionMay 13, 2022 pm 05:06 PM

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Hot Tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function