java 存储过程返回结果集_通过SQL“select * from”从java存储过程返回结果集
我可以直接通过SQL select * from语句从java存储过程(oracle)获取结果吗?
在数据库上,我将有一个java存储过程/函数,当它被调用时返回一个多列,多行结果集.
我想直接通过select * from [table]语句访问这些结果.
所以java存储过程应该像表一样.
在MySQL中,以下应该是可能的(但不是java存储过程):SELECT col1 FROM(EXEC proc1)
这可能在oracle中proc1是一个java存储过程吗?
解决方法:
This answer在不同的论坛可以帮到你.
查看消息底部的示例,了解如何从Java方法返回的集合中进行选择(也可能是Java存储过程).
以下是有关如何使用Java存储过程执行此操作的示例
1)创建DB对象以定义返回行的类型:
create type try_obj as object (
field_a number,
field_b varchar2(10)
)
/
create type try_obj_tab as table of try_obj
/
2)使用返回Collection的静态方法(GetSampleResult)在DB上创建Java类
create or replace and compile java source named QueryReturn as
import java.sql.*;
import java.util.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.OracleDataSource;
import oracle.sql.*;
public class QueryReturn implements ORADataFactory,ORAData{
private NUMBER field1;
private CHAR field2;
public QueryReturn(OracleConnection conn,int n,String c) throws SQLException {
field1 = new NUMBER(n);
field2 = new CHAR(c,oracle.sql.CharacterSet.make(conn.getStructAttrCsId()));
}
public QueryReturn(NUMBER n, CHAR c) {
field1 = n;
field2 = c;
}
public QueryReturn(Object[] attributes) {
this(
(NUMBER) attributes[0],
(CHAR) attributes[1]
);
}
public QueryReturn(Datum d) throws SQLException {
this(((STRUCT) d).getOracleAttributes());
}
public ORAData create(Datum d, int sqlType) throws SQLException {
if (d == null)
return null;
else {
return new QueryReturn(d);
}
}
public STRUCT toSTRUCT(Connection conn) throws SQLException {
StructDescriptor sd =
StructDescriptor.createDescriptor("TRY_OBJ", conn);
Object [] attributes = { field1,field2 };
return new STRUCT(sd, conn, attributes);
}
public Datum toDatum(Connection conn) throws SQLException {
return toSTRUCT(conn);
}
public static ARRAY GetSampleResult() throws SQLException, ClassNotFoundException {
// initialize the connection
OracleConnection conn = null;
conn = (OracleConnection) (new oracle.jdbc.OracleDriver()).defaultConnection();
// create the return java array
// There will be two Rows
// 1 abc
// 2 dce
QueryReturn javaArray[] = {
new QueryReturn(conn,1,"abc"),
new QueryReturn(conn,2,"dce")
};
// Map the java class to the Oracle type
Map map = conn.getTypeMap();
map.put("TRY_OBJ", Class.forName("QueryReturn"));
ArrayDescriptor jTryObjArrayDesc = ArrayDescriptor.createDescriptor (
"TRY_OBJ_TAB",
conn
);
// create an Oracle collection on client side to use as parameter
ARRAY oracleCollection = new ARRAY(jTryObjArrayDesc,conn,javaArray);
return oracleCollection;
}
}
3)创建Wrap以在函数中使用Java存储过程
create or replace function GetSampleResult
return try_obj_tab
AS LANGUAGE JAVA
NAME 'QueryReturn.GetSampleResult() return oracle.sql.ARRAY';
4)显示结果
SQL> select *
2 from table(GetSampleResult())
3 /
FIELD_A FIELD_B
---------- ----------
1 abc
2 dce
SQL>
标签:java,sql,stored-procedures,oracle
来源: https://codeday.me/bug/20190621/1255122.html
java 存储过程返回结果集_通过SQL“select * from”从java存储过程返回结果集相关推荐
- 存储过程中定义sql语句_学习SQL:用户定义的存储过程
存储过程中定义sql语句 Stored procedures (SPs) are one more powerful database object we have at our disposal. ...
- java get方法报空指针_面试的哪些事儿之JAVA程序员面试笔试题(一)
前言 在一个技术微信群看一个网友最近在一家公司做笔试的题目,然后我就整理了一下,供大家参考一下,希望能够帮助到大家. 笔试内容 1.假设有一个mysql实例,相关信息如下: schema名为test用 ...
- mysql存储过程输入参数拆分_一文看懂mysql数据库存储过程、函数、视图、触发器、表...
概述 抽空总结一下mysql的一些概念性内容,涉及存储过程.函数.视图.触发器等. 一.查看存储过程.函数.视图.触发器.表 1.存储过程 select * from mysql.proc where ...
- 用Java代码实现日志记录器_如何在此简单的Java日志记录实现中附加到日志文件? - java...
我得到了以下用于创建和管理Logger的类.每当执行代码和程序时,都会使用对静态getLogger()捕获块的调用进行记录. public class Log { private static fin ...
- java单元测试读文件数据_如何将文本文件资源读入Java单元测试?
本问题已经有最佳答案,请猛点这里访问. 我有一个单元测试需要使用位于src/test/resources/abc.xml中的XML文件.把文件的内容放到String中最简单的方法是什么? 另外,sta ...
- java中Solution怎么用_【leetcode】solution in java——Easy4
16:Invert Binary Tree 此题:以根为对称轴,反转二叉树. 思路:看到二叉树,我们第一时间要想到处理二叉树的常用方法--BFS.DFS,更常用的是DFS.此题我们先用BFS来思考:B ...
- java中解密的思想_北大青鸟翔天解密,Java核心思想两大点
Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少.对核心概念和思想的掌握可以帮助我们举一反三.触类旁通,有助于提升我们对整个J ...
- java超出gc开销限制_超出了GC开销限制– Java堆分析
java超出gc开销限制 这篇文章是我们原来的GC开销超出问题模式的延续. 正确的Java堆分析对于消除OutOfMemoryError:GC开销问题至关重要. 如果您不熟悉此Java HotSp ...
- java能调用python吗_如何使用运行时在Java中调用python程序 - java
我想用来自Java的参数调用python程序.但是我的输出是空白.代码在这里. Python代码在这里: import sys print(sys.argv[1]) Java代码在这里: public ...
最新文章
- 用Python不回头也能看美女,这招你会了吗?
- SCOM发送邮件通知
- 获取打印机分辨率_喵喵机P2S热敏打印机,升级屏幕带来了哪些体验??
- C++中的覆盖(重写)、重载、隐藏(重定义)、多态!
- navicat 导入SQL文件出错
- [2019CSP多校联赛普及组第五周] 调度CPU (贪心)
- 鼠标移动响应php程序,jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】...
- ( linker command failed with exit code 1) 错误解决方案 项目使用的是pod
- 为什么MediaPlayer中onCompletion()每次播放音频时都触发?
- 【java】Java 最坑爹的 10 大功能点
- Solr4.3整合到Tomcat中并添加MMSeg4j中文分词器
- 02 超级搜索术——资源搜索:全面、快速查找全网你想要的任何信息、情报
- 神经网络学习小记录64——Pytorch 图像处理中注意力机制的解析与代码详解
- 一个屌丝程序猿的人生(六十一)
- ubuntu开机密码破解
- 《搞不定人,你如何带团队?》读书记录
- c++代码使用堆空间实现数据结构栈
- 【Day1】一小时入门 python 基础,从安装到入门
- si446使用记录(二):使用WDS3生成头文件
- 解题记录 LeetCode 下一个更大元素 II 单调栈
热门文章
- pc端实现 网页居中显示 且自适应
- javascript文本对象
- filedisk学习资料
- 从零开始学前端:CSS背景颜色 --- 今天你学习了吗?(CSS:Day09)
- signature=51b3a9ac95339489ef7384c6e21e303f,nginx – Let’s Encrypt的中间证书
- 视频服务器读取hdfs文件,基于HDFS的流媒体服务器Red5视频文件分发的研究与应用...
- 力扣76,最小覆盖字串(JavaScript)
- linux分支结构,实验四 Shell脚本中的分支结构
- ecshop 模板页php,解决ecshop新建页面分页问题
- java获取异常信息_Python中获取异常(Exception)信息