在Oracle中用java编写存储过程

在Oracle中用java编写存储过程,第1张

Oracle自带一个JVM 内置对Java的支持 任何Java能做的事情你都可以放到Oracle里面来做 你甚至可以在里面 *** 作db 这让Oracle具备了极其巨大的扩展能力 只要你愿意 完全可以开发一个trigger 让它在适当的时候给管理员的msn发送一条即时消息

由于ps/SQL是过程化的语言 它基本上不具备多态的概念 供Oracle使用的Java方法必须申明为static 所以在Oracle中你无法使用Java的动态特性 比如接口 反射等 不过这并不妨碍你用Java *** 做的事

我们以一个简单的hello world为例 我想任何一个有经验的Java程序员都能够通过这个例子 派生出其他希奇古怪的应用 有好的创意记得要与我共享 我的msn是

首先是创建一个Java类 启动SQL plus 执行如下命令

create or replace and pile java source named hello_sp as

package bromon oracle

public class Hello

{

public static String say(String name)

{

return 你好 +name

}

}

Java程序已创建

然后在Oracle中把这个类导入成为一个函数 执行命令

create or replace function hello_sp(name varchar ) return varchar

as language java name

bromon oracle Hello say(java lang String) return java lang String

函数已创建

现在可以调用该函数 执行

select hello( bromon ) from dual

返回结果 你好 bromon

有一个需要注意的问题是 假如我们的java方法是没有参数的 比如

public static String say()

{

return 你好

}

那么在创建函数的时候 函数名不应该有扩号 hello_sp 否则会报告函数有编译错误

如果你的Java类是在IDE里面编写的 那么只需要在oracle中加载编译过的class文件即可 方法是

lishixinzhi/Article/program/Oracle/201311/18111

在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了,

1、 *** 作系统需要拥有支持loadjava命令的jdk。

2、加载jlha.jar包,到oracle数据库中。

*** 作过程:在dos环境下,输入命令: loadjava -r -f -o -user usscares/usscares@usscares jlha.jar

注意:jar包要在1.4的环境下编译,项目右键 properties java compiler compoler compliance level 1.4 即可 否则报version 49 类似的错误

一个最简单连接oracle的例子

package oracletest

import java.sql.Connection

import java.sql.DriverManager

import java.sql.ResultSet

import java.sql.SQLException

import java.sql.Statement

public class OracleTest {

public static void main(String[] args) {

//String serverName = "localhost"

try {

Class.forName("oracle.jdbc.driver.OracleDriver")

System.out.println("1")

String url = "jdbc:oracle:thin:@localhost:1521:ORA9I"

Connection conn = DriverManager.getConnection(url, "scott", "tiger")

System.out.println("2")

Statement stmt = conn.createStatement()

ResultSet rs = stmt.executeQuery("select * from test1")

while (rs.next()) {

System.out.println(rs.getString("id"))

System.out.println(rs.getString("name"))

}

} catch (SQLException e) {

// TODO 自动生成 catch 块

e.printStackTrace()

} catch (ClassNotFoundException e) {

// TODO 自动生成 catch 块

e.printStackTrace()

}

}

}


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

原文地址: http://outofmemory.cn/yw/12062828.html

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

发表评论

登录后才能评论

评论列表(0条)

保存