`
lsy
  • 浏览: 122993 次
  • 性别: 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触发器调用java程序

    Oracle触发器调用Java程序 Oracle触发器是Oracle数据库中...这将创建一个名为OracleTriggerJava的Java类,该类包含两个方法:main方法和modify方法。main方法用于文件的写入操作,而modify方法则用于文件的读写操作。

    java oracle数据库过程实现jsp分页

    在Oracle数据库中,我们可以创建一个包含分页逻辑的存储过程,接收两个参数:页数`P`和每页大小`N`,并返回所需的数据。 以下是一个简单的Oracle存储过程示例: ```sql CREATE OR REPLACE PACKAGE page_pkg AS ...

    java调用Oracle存储过程的代码

    接下来,我们需要建立一个到Oracle数据库的连接。使用Java的`java.sql.DriverManager`类来注册驱动并建立连接: ```java import java.sql.Connection; import java.sql.DriverManager; public class Oracle...

    java调用oracle存储过程并得到结果集

    接下来,我们创建一个Java类来连接Oracle数据库。这通常涉及以下步骤: 1. 导入所需的JDBC包,如`java.sql.Connection`, `java.sql.DriverManager`, `java.sql.ResultSet`, `java.sql.Statement`等。 2. 注册Oracle ...

    java调用Oracle存储过程

    在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将深入探讨如何使用Java与...记住,实践是最好的老师,尝试编写一个简单的Java程序来调用Oracle存储过程,加深理解。

    java调用oracle存储过程

    ojdbc6.jar是Oracle JDBC驱动的一个版本,适用于Java 6环境,而ojdbc14.jar是针对Java 5的版本。它们都包含了必要的类和接口,使得Java程序能够通过JDBC API连接到Oracle数据库,并执行SQL语句和存储过程。 调用...

    Oracle获取汉字拼音和拼音首字母的功能函数

    总结来说,虽然Oracle自身不提供汉字转拼音的原生函数,但我们可以通过自定义存储过程结合Java代码或使用第三方PL/SQL包来实现这个功能。这两种方法各有优缺点,根据实际项目需求和环境选择合适的方法。

    Java调用oracle存储过程输出自定义对象或二维表

    当存储过程返回自定义对象时,你需要创建一个对应的Java类来映射Oracle的PL/SQL记录类型。例如,如果你有一个名为`MY_OBJECT`的PL/SQL记录类型,你可以创建如下Java类: ```java public class MyObject { private ...

    Oracle 返回多个结果集

    -- 处理第一个结果集 OPEN cursor1; LOOP FETCH cursor1 INTO var1, var2; EXIT WHEN cursor1%NOTFOUND; -- 打印或处理结果 END LOOP; CLOSE cursor1; -- 处理第二个结果集 OPEN cursor2; LOOP FETCH ...

    java调用oracle简单存储过程

    // 设置第一个参数值 proc.setString(2, "TestOne"); // 设置第二个参数值 proc.execute(); // 执行存储过程 } catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2....

    Oracle JDeveloper与Oracle数据库

    Oracle JDeveloper 是一款集成开发环境(IDE),主要用于开发Java应用程序,并且特别针对Oracle应用服务器进行了优化。它支持快速创建企业级应用程序,同时也支持其他第三方数据库的集成。 #### 二、Oracle ...

    Java下使用Oracle存储过程(详解)第1/3页

    首先,我们来看第一种创建Java存储过程的方法,即通过Oracle的SQL语句直接创建。这涉及到两个步骤:一是创建Java源代码,二是定义存储过程。例如: ```sql -- 创建Java源代码 CREATE OR REPLACE AND COMPILE JAVA ...

    超级详细Oracle教程 java

    - **第二范式**:基于第一范式的进一步优化。 - **第三范式**:消除传递依赖。 - **BCNF、第四范式、第五范式**:更高的规范化级别。 #### 二十六、数据库设计工具 - **ER模型**:实体-关系模型的构建。 - **...

    用java调用oracle存储过程总结[文].pdf

    // 设置第一个参数 proc.setString(2, "TestOne"); // 设置第二个参数 proc.execute(); // 执行存储过程 // 关闭资源的代码省略 } } ``` 接下来,我们讨论有返回值的存储过程。假设有一个名为`TESTB`的存储...

    Oracle中把ArrayOracle中把

    如果第一次运行,忽略关于对象不存在的错误是合理的。 总结,Oracle 中使用自定义类型模拟 Array,结合存储过程和 Java 应用程序,可以高效地处理批量数据操作。这种方式提高了代码的可读性和性能,因为数据的处理...

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.docx

    o_table(1) := '第一个元素'; o_table(2) := '第二个元素'; -- 更多元素可以添加到这里 END testPro1; ``` 在这个例子中,`o_table` 是一个索引表,用于存储过程的输出。它使用了 `out_param.out_index_table_...

    oracle如何使用java source调用外部程序

    这里,第一个调用`pro_jv_run_extpro`使用`sqluldr2`导出`emp`表的数据到文本文件`OUT2.TXT`,第二个调用则是使用`WinRAR`将文件压缩为`20160916.rar`。 值得注意的是,Java Source在Oracle中的使用需要确保数据库...

    Oracle Developer:第2章 Oracle Developer对象综述.pdf

    标题中提及的"第2章 Oracle Developer对象综述"可能是一本关于Oracle Developer教程的第二章节,主要介绍Oracle Developer中各种对象的特性与使用方法。 描述部分的内容重复了标题,但从中我们可以推断,文档可能是...

    调用Oracle的存储过程

    本主题将深入探讨如何使用Java编程语言调用Oracle数据库中的存储过程,这是一个常见的需求,尤其在需要进行复杂业务逻辑处理时。下面我们将详细讨论相关知识点。 首先,存储过程是数据库中预编译的一组SQL语句,...

Global site tag (gtag.js) - Google Analytics