第一次在Oracle上写Java语言开发的存储过程,所以做个笔记以备日后查阅。
首先开发一个Java的POJO,也就是要编译成为存储过程的类,代码如下:
public class HttpUrlCaller {
public HttpUrlCaller() {
}
public static final String GET_URL =
"http://localhost:7777/ServletTest/test.zte?name=k4&age=48";
private static URLConnection connection;
private static void connect(String urlString) {
try {
URL url = new URL(urlString);
connection = url.openConnection();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static String getContents() {
String str = "";
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
str += inputLine;
}
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
public static String entry(String url) {
connect(url);
String result = getContents();
System.out.println(result);
return result;
}
}
如果该POJO用到了第三方类库的话,那么就需要在command窗口模式下使用loadjava/dropjava命令先将第三方类库上传/下载。
好了,完成了编写POJO以后,同样使用loadjava上传该类,并且通过一些命令的参数解析这个类文件,如:
loadjava -user <username>/<password>@<service_name> -v -f -r d:/lsy/HttpUrlCaller.java
其中:
-v 显示执行过程
-f 强制装载
-r 编译并解析类
转载成功之后,就要将HttpUrlCaller类的entry方法转换为存储过程:
CREATE OR REPLACE PROCEDURE myJavaProcedure(url IN VARCHAR2)
AUTHID CURRENT_USER
AS LANGUAGE JAVA NAME 'HttpUrlCaller.entry(java.lang.String)'
这时候就全部成功了,可以使用call myJavaProcedure('url');测试一下。
由于这个例子的代码使用了URLConnection 的API所以需要给数据库的登陆用户设置一下权限,否则在执行上述操作的时候,很有可能发生下述错误:
java.security.AccessControlException: the Permission (java.net.SocketPermission 127.0.0.1:7777 connect,resolve) has not been granted to SISTEMAS. The PL/SQL to grant this is dbms_java.grant_permission( 'apps', 'SYS:java.ne
t.SocketPermission', 127.0.0.1:7777', 'connect,resolve' )
提示信息就是说apps的用户没有权限,可以使用sys用户授权,执行:
exec dbms_java.grant_permission( 'apps',
'SYS:java.net.SocketPermission',
'127.0.0.1:7777',
'connect,resolve' )
如果还有关于权限的问题,可以尝试着执行下列命令:
exec dbms_java.grant_permission('apps','java.util.PropertyPermission','*','*');
exec dbms_java.grant_permission('apps','java.io.SerializablePermission','*','*');
exec dbms_java.grant_permission('apps','java.io.FilePermission','*','*');
exec dbms_java.grant_permission('apps','java.net.NetPermission','*','*');
exec dbms_java.grant_permission('apps','java.net.SocketPermission','*','*');
exec dbms_java.grant_permission('apps','java.lang.RuntimePermission','*','*');
exec dbms_java.grant_permission('apps','java.lang.reflect.ReflectPermission','*','*');
exec dbms_java.grant_permission('apps','java.security.SecurityPermission','*','*');
exec dbms_java.grant_permission('apps','oracle.aurora.rdbms.security.PolicyTablePermission','*','*');
exec dbms_java.grant_permission('apps','oracle.aurora.security.JServerPermission','*','*');
分享到:
相关推荐
│ Oracle DBA学习心得 --第1章 - ColorfulStar3399的专栏 - CSDN博客.mht │ Oracle Direct-Path Insert学习笔记 - NyThing的Java日记 - JavaEye技术网站.mht │ oracle 常用傻瓜1000问 - oracle10g - 小呵呵.mht ...
基于智能方式,一次编译多个数据库对象 TOAD Editor 的 PL/SQL 编辑和调试功能紧密集成,可以只对特定区域进行测试,也可以只运行当前/下一语句,或此前所有语句。 TOAD 提供多种不同的建模功能:ER View 可以...
第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据...
第一讲 Oacle关系数据库 9 一. Oracle的安装 9 二. 用浏览器进入em 企业管理器 11 三.启动DBCA的方法 11 四.服务设置 11 五. Oracle的卸载 11 六. Oracle数据库的应用系统结构 11 七. 补充资料——oracle安装...
第一讲 Oacle关系数据库 9 一. Oracle的安装 9 二. 用浏览器进入em 企业管理器 11 三.启动DBCA的方法 11 四.服务设置 11 五. Oracle的卸载 11 六. Oracle数据库的应用系统结构 11 七. 补充资料——oracle安装...
{1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {...
发生Java异常: java.sql.SQLException: ORA-06550: 第 1 行,第 7 列: PLS-00306:调用“myproc”时参数数量或类型错误ORA-06550:第 1 行,第 7 列: PL/SQL:忽略语句 在 sun.jdbc.odbc.JdbcOdbc....
第一个就是业务对象名称, 第二个是业务对象服务名称,第三个是传回来的olevariant; 强调一点。sBOName:sBOService:这两个参数并不直接对应中间层的业务对象。之间加了一个转换层。也就是service定位层。这个东西把...
Toad由Oracle开发专家专门为开发人员而设计,是一个功能强大、结构紧凑的专业化PL/SQL开发环境。 Toad 主要具有如下特点: 模式浏览: 模式浏览功能可以让我们快速访问数据字典,浏览数据库中的表、索引、存储过程。...
5.first属性,返回第一个元素的下标 6.last 属性,赶回最后一个元素的下标 7.limit属性 ,返回集合中最大元素的个数 8.next属性,next(x)返回位置x处的后面的那个元素 的索引 9.prior属性 prior(x)返回 x处...
在本文第一段代码中有一句话如下: cursor c_emp is select * from employee where emp_id=3; 其含义是定义一个游标c_emp,代表employee表中所有emp_id字段为3的结果集。当需要操作该结果集时,必须完成三步:打开...
-- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...
网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令...JSP:HTML网页,其中包含有对一个Java servlet...