`
lsy
  • 浏览: 121426 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

第一个Oracle Java Procedure

阅读更多
第一次在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 10g 学习笔记

    │ Oracle DBA学习心得 --第1章 - ColorfulStar3399的专栏 - CSDN博客.mht │ Oracle Direct-Path Insert学习笔记 - NyThing的Java日记 - JavaEye技术网站.mht │ oracle 常用傻瓜1000问 - oracle10g - 小呵呵.mht ...

    toad for oracle 11

    基于智能方式,一次编译多个数据库对象 TOAD Editor 的 PL/SQL 编辑和调试功能紧密集成,可以只对特定区域进行测试,也可以只运行当前/下一语句,或此前所有语句。 TOAD 提供多种不同的建模功能:ER View 可以...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据...

    oracle数据库笔记

    第一讲 Oacle关系数据库 9 一. Oracle的安装 9 二. 用浏览器进入em 企业管理器 11 三.启动DBCA的方法 11 四.服务设置 11 五. Oracle的卸载 11 六. Oracle数据库的应用系统结构 11 七. 补充资料——oracle安装...

    Oracle 10g 开发与管理

    第一讲 Oacle关系数据库 9 一. Oracle的安装 9 二. 用浏览器进入em 企业管理器 11 三.启动DBCA的方法 11 四.服务设置 11 五. Oracle的卸载 11 六. Oracle数据库的应用系统结构 11 七. 补充资料——oracle安装...

    Java学习笔记-个人整理的

    {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} {...

    一个错误修复的运行存储过程。m:官方运行存储过程中有一个错误。 此文件修复了错误。-matlab开发

    发生Java异常: java.sql.SQLException: ORA-06550: 第 1 行,第 7 列: PLS-00306:调用“myproc”时参数数量或类型错误ORA-06550:第 1 行,第 7 列: PL/SQL:忽略语句 在 sun.jdbc.odbc.JdbcOdbc....

    Delphi最新三层源码

    第一个就是业务对象名称, 第二个是业务对象服务名称,第三个是传回来的olevariant; 强调一点。sBOName:sBOService:这两个参数并不直接对应中间层的业务对象。之间加了一个转换层。也就是service定位层。这个东西把...

    Toad 使用快速入门

    Toad由Oracle开发专家专门为开发人员而设计,是一个功能强大、结构紧凑的专业化PL/SQL开发环境。 Toad 主要具有如下特点: 模式浏览: 模式浏览功能可以让我们快速访问数据字典,浏览数据库中的表、索引、存储过程。...

    PL/SQL学习笔记

    5.first属性,返回第一个元素的下标 6.last 属性,赶回最后一个元素的下标 7.limit属性 ,返回集合中最大元素的个数 8.next属性,next(x)返回位置x处的后面的那个元素 的索引 9.prior属性 prior(x)返回 x处...

    PLSQLDeveloper下载

    在本文第一段代码中有一句话如下: cursor c_emp is select * from employee where emp_id=3; 其含义是定义一个游标c_emp,代表employee表中所有emp_id字段为3的结果集。当需要操作该结果集时,必须完成三步:打开...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

    网管教程 从入门到精通软件篇.txt

    网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令...JSP:HTML网页,其中包含有对一个Java servlet...

Global site tag (gtag.js) - Google Analytics