第一次在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触发器是Oracle数据库中...这将创建一个名为OracleTriggerJava的Java类,该类包含两个方法:main方法和modify方法。main方法用于文件的写入操作,而modify方法则用于文件的读写操作。
在Oracle数据库中,我们可以创建一个包含分页逻辑的存储过程,接收两个参数:页数`P`和每页大小`N`,并返回所需的数据。 以下是一个简单的Oracle存储过程示例: ```sql CREATE OR REPLACE PACKAGE page_pkg AS ...
接下来,我们需要建立一个到Oracle数据库的连接。使用Java的`java.sql.DriverManager`类来注册驱动并建立连接: ```java import java.sql.Connection; import java.sql.DriverManager; public class Oracle...
接下来,我们创建一个Java类来连接Oracle数据库。这通常涉及以下步骤: 1. 导入所需的JDBC包,如`java.sql.Connection`, `java.sql.DriverManager`, `java.sql.ResultSet`, `java.sql.Statement`等。 2. 注册Oracle ...
在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将深入探讨如何使用Java与...记住,实践是最好的老师,尝试编写一个简单的Java程序来调用Oracle存储过程,加深理解。
ojdbc6.jar是Oracle JDBC驱动的一个版本,适用于Java 6环境,而ojdbc14.jar是针对Java 5的版本。它们都包含了必要的类和接口,使得Java程序能够通过JDBC API连接到Oracle数据库,并执行SQL语句和存储过程。 调用...
总结来说,虽然Oracle自身不提供汉字转拼音的原生函数,但我们可以通过自定义存储过程结合Java代码或使用第三方PL/SQL包来实现这个功能。这两种方法各有优缺点,根据实际项目需求和环境选择合适的方法。
当存储过程返回自定义对象时,你需要创建一个对应的Java类来映射Oracle的PL/SQL记录类型。例如,如果你有一个名为`MY_OBJECT`的PL/SQL记录类型,你可以创建如下Java类: ```java public class MyObject { private ...
-- 处理第一个结果集 OPEN cursor1; LOOP FETCH cursor1 INTO var1, var2; EXIT WHEN cursor1%NOTFOUND; -- 打印或处理结果 END LOOP; CLOSE cursor1; -- 处理第二个结果集 OPEN cursor2; LOOP FETCH ...
// 设置第一个参数值 proc.setString(2, "TestOne"); // 设置第二个参数值 proc.execute(); // 执行存储过程 } catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2....
Oracle JDeveloper 是一款集成开发环境(IDE),主要用于开发Java应用程序,并且特别针对Oracle应用服务器进行了优化。它支持快速创建企业级应用程序,同时也支持其他第三方数据库的集成。 #### 二、Oracle ...
首先,我们来看第一种创建Java存储过程的方法,即通过Oracle的SQL语句直接创建。这涉及到两个步骤:一是创建Java源代码,二是定义存储过程。例如: ```sql -- 创建Java源代码 CREATE OR REPLACE AND COMPILE JAVA ...
- **第二范式**:基于第一范式的进一步优化。 - **第三范式**:消除传递依赖。 - **BCNF、第四范式、第五范式**:更高的规范化级别。 #### 二十六、数据库设计工具 - **ER模型**:实体-关系模型的构建。 - **...
// 设置第一个参数 proc.setString(2, "TestOne"); // 设置第二个参数 proc.execute(); // 执行存储过程 // 关闭资源的代码省略 } } ``` 接下来,我们讨论有返回值的存储过程。假设有一个名为`TESTB`的存储...
如果第一次运行,忽略关于对象不存在的错误是合理的。 总结,Oracle 中使用自定义类型模拟 Array,结合存储过程和 Java 应用程序,可以高效地处理批量数据操作。这种方式提高了代码的可读性和性能,因为数据的处理...
o_table(1) := '第一个元素'; o_table(2) := '第二个元素'; -- 更多元素可以添加到这里 END testPro1; ``` 在这个例子中,`o_table` 是一个索引表,用于存储过程的输出。它使用了 `out_param.out_index_table_...
这里,第一个调用`pro_jv_run_extpro`使用`sqluldr2`导出`emp`表的数据到文本文件`OUT2.TXT`,第二个调用则是使用`WinRAR`将文件压缩为`20160916.rar`。 值得注意的是,Java Source在Oracle中的使用需要确保数据库...
标题中提及的"第2章 Oracle Developer对象综述"可能是一本关于Oracle Developer教程的第二章节,主要介绍Oracle Developer中各种对象的特性与使用方法。 描述部分的内容重复了标题,但从中我们可以推断,文档可能是...
本主题将深入探讨如何使用Java编程语言调用Oracle数据库中的存储过程,这是一个常见的需求,尤其在需要进行复杂业务逻辑处理时。下面我们将详细讨论相关知识点。 首先,存储过程是数据库中预编译的一组SQL语句,...