JAVA解析存储过程获取的对象_java 解析数据的存储过程的

先定义枚举:

public enum ProcParamType {

IN,OUT

}

调用存储过程的描述

public class ProcCallableDescriptor {

private List procParams = new ArrayList();

public List getProcParams() {

return procParams;

}

public void addProPram(ProcParam param) {

procParams.add(param);

}

public void addInProParam(int index, Object paramValue) {

addProPram(new ProcParam(index, paramValue));

}

public void addOutProParam(int index, int sqlType) {

addProPram(new ProcParam(index, sqlType));

}

public static class ProcParam {

private int index;

private ProcParamType paramType;

private Object paramValue;

private int sqlType; //出参数时指定sqlType

/**

* 入参数构造函数

* @param index

* @param paramValue

*/

public ProcParam(int index,  Object paramValue) {

super();

this.index = index;

this.paramType = ProcParamType.IN;

this.paramValue = paramValue;

}

/**

* 出参数构造函数

* @param index

* @param sqlType

*/

public ProcParam(int index, int sqlType) {

super();

this.index = index;

this.paramType = ProcParamType.OUT;

this.sqlType = sqlType;

}

public int getIndex() {

return index;

}

public void setIndex(int index) {

this.index = index;

}

public ProcParamType getParamType() {

return paramType;

}

public void setParamType(ProcParamType paramType) {

this.paramType = paramType;

}

public Object getParamValue() {

return paramValue;

}

public void setParamValue(Object paramValue) {

this.paramValue = paramValue;

}

public int getSqlType() {

return sqlType;

}

public void setSqlType(int sqlType) {

this.sqlType = sqlType;

}

}

}

服务类:

@Service

public class ProcedureService {

@Autowired

protected SessionFactory sessionFactory;

public Object call(String sqlStatement, ProcCallableDescriptor descriptor) throws Exception {

List outParams = new ArrayList();

Session session = sessionFactory.openSession();

Transaction tx = session.beginTransaction();

Connection con = SessionFactoryUtils.getDataSource(sessionFactory).getConnection();

try {

CallableStatement cstmt = con.prepareCall(sqlStatement);

if (ObjectUtils.isNotEmpty(descriptor.getProcParams())) {

for (ProcCallableDescriptor.ProcParam param : descriptor.getProcParams()) {

if (ProcParamType.IN.equals(param.getParamType())) {

cstmt.setObject(param.getIndex(), param.getParamValue());

} else if (ProcParamType.OUT.equals(param.getParamType())) {

cstmt.registerOutParameter(param.getIndex(), param.getSqlType());

}

}

}

cstmt.execute();

if (ObjectUtils.isNotEmpty(descriptor.getProcParams())) {

for (ProcCallableDescriptor.ProcParam param : descriptor.getProcParams()) {

if (ProcParamType.OUT.equals(param.getParamType())) {

Object outObj = cstmt.getObject(param.getIndex());

//如果出参是ResultSet类型直接转换成ListOfMap结构

if (outObj instanceof ResultSet) {

List> listOfMaps = new ArrayList>();

ResultSet rs = (ResultSet) outObj;

while (rs.next()) {

Map row = new LinkedHashMap();

for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {

row.put(rs.getMetaData().getColumnLabel(i).toLowerCase(), rs.getObject(i));

}

listOfMaps.add(row);

}

rs.close();

outParams.add(listOfMaps);

} else {

outParams.add(outObj);

}

}

}

}

cstmt.close();

tx.commit();

} catch (Exception e) {

tx.rollback();

throw e;

} finally {

if(con!=null){

con.close();

}

session.close();

}

int outPramCount = 0;

if (ObjectUtils.isNotEmpty(descriptor.getProcParams())) {

for (ProcCallableDescriptor.ProcParam param : descriptor.getProcParams()) {

if (ProcParamType.OUT.equals(param.getParamType())) {

outPramCount++;

}

}

}

if (outPramCount == 1 && ObjectUtils.isNotEmpty(outParams)) {

return outParams.get(0);

} else {

return outParams;

}

}

}

test测试类:

public class ProcedureServiceTest  extends AbstractTestCase{     @Autowired     private ProcedureService service;     @Test     public void test() throws Exception{         ProcCallableDescriptor desc = new ProcCallableDescriptor();         desc.addInProParam(1, DateUtils.toSqlDate("2012-06-08", "yyyy-MM-dd"));         desc.addInProParam(2, DateUtils.toSqlDate("2012-06-09", "yyyy-MM-dd"));         desc.addOutProParam(3, -10);         Object obj = service.call("{call rp1(?,?,?)} ", desc);         System.out.println(obj);     } }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis五种数据类型及应用场景

Redis五种数据类型及应用场景 MySqlMemcached架构的问题 实际MySQL是适合进行海量数据存储的&#xff0c;通过Memcached将热点数据加载到cache&#xff0c;加速访问&#xff0c;很多公司都曾经使用过这样的架构&#xff0c;但随着业务数据量的不断增加&#xff0c;和访问量的…

轮询、长轮询与Web Socket的前端实现

Web Socket 应用场景:实现即时通讯:如股票交易行情分析、聊天室、在线游戏等&#xff0c;替代轮询和长轮询 轮询 轮询是在特定的的时间间隔&#xff08;如每1秒&#xff09;&#xff0c;由浏览器对服务器发出HTTP request&#xff0c;然后由服务器返回最新的数据给客户端的浏…

java apt怎么用_java – APT和AOP在同一个项目中,使用Maven

我显然是唯一能够回答我自己问题的人.我已经使用Maven Antrun Plugin通过ant编译AspectJ.这是我的pom片段&#xff1a;maven-antrun-plugin1.4org.aspectjaspectjtools${aspectj.version}ajc-compileprocess-classesvalue"${project.basedir}/src/main/aspect" />…

WebSocket介绍和Socket的区别

WebSocket介绍与原理 WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP)请求完成。 ——百度百科 目的&#xff1a;即时通讯&#xff0c;替代轮询 应用场景&#xff1a;网站上的即时通讯是很常见的&#xf…

python代码html显示数据_通过AJAX success方法以html格式显示数据

我正在编写下面的代码&#xff0c;用json格式从数据库返回的html表中显示数据success : function(data){alert("declaring variable");var output"alert("creating output");output"" "" "REPORTSUITE_ID" "&q…

WebSocket协议入门介绍

文章目录WebSocket协议是什么WebSocket是应用层协议WebSocket与Http的区别为什么要使用WebSocket如何使用WebSocket客户端API在客户端使用WebSocket在服务端使用WebSocket反向代理对WebSocket的支持WebSocket协议是什么 WebSocket是应用层协议 WebSocket是基于TCP的应用层协议…

远程ykvm 插件移值java_Centos7 命令行下kvm安装windows,linux

查看是否支持egrep "svm|vmx" /proc/cpuinfo |uniq安装软件yum install libvirt -yyum -y install qemu-kvmsystemctl enable libvirtd && systemctl start libvirtd# 启动libvitd服务查看 ip add #查看是否有 virbr0网卡 yum install virt-installcentos7 例…

Websocket——原理及基本属性和方法

Websocket——原理及基本属性和方法 初次接触 WebSocket 的人&#xff0c;都会问同样的问题&#xff1a;我们已经有了 HTTP 协议&#xff0c;为什么还需要另一个协议&#xff1f;它能带来什么好处&#xff1f; 答案很简单&#xff0c;因为 HTTP 协议有一个缺陷&#xff1a;通…

php7.0扩展yac,php扩展之yac安装

git克隆$ git clone https://github.com/laruence/yac.git解压安装注意这里的php-config可能不一样查看php-config位置$whereis php编译安装$ cd yac$ phpize$ ./configure --with-php-config/usr/bin/php-config$ make$ make install修改php.ini,载入扩展,重启php-fpmextensio…

springboot+websocket实现服务端、客户端

一、引言 小编最近一直在使用springboot框架开发项目&#xff0c;毕竟现在很多公司都在采用此框架&#xff0c;之后小编也会陆续写关于springboot开发常用功能的文章。 什么场景下会要使用到websocket的呢&#xff1f; websocket主要功能就是实现网络通讯&#xff0c;比如说…

输出有样式的php,PHP导出带样式的Excel

工作中做导出的时候&#xff0c;需要导出自定义的表格或嫌弃导出的Excel格式太难看了。需要设置颜色、字号大小、加粗、合并单元格等等。Paste_Image.pngPHP代码&#xff1a;php/**导出文件return string*/public function export(){$file_name "成绩单-".date(&quo…

java 实现websocket的两种方式

简单说明 1.两种方式&#xff0c;一种使用tomcat的websocket实现&#xff0c;一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x&#xff0c;JEE7的支持。 3.spring与websocket整合需要spring 4.x&#xff0c;并且使用了socketjs&#xff0c;对不支持websocket的浏览…

php 地址传递,PHP引用符传递存储地址

关于php的引用(就是在变量或者函数、对象等前面加上&符号)的作用&#xff0c;我们先看下面这个程序。代码如下:$a 100; //声明变量a$b &$a; //声明变量b,引用自变量aecho "$a ";echo "$b ";$a; //变量a自增1echo "$a ";echo "$b …

idea创建多模块Springboot项目、导入多模块、删除多模块

前言 在eclipse中有Workspace&#xff08;工作空间&#xff09;和 Project&#xff08;工程&#xff09;的概念在 IDEA中只有 Project&#xff08;工程&#xff09;和 Module&#xff08;模块&#xff09;的概念。这个地方刚开始用的时候会很容易理不清它们之间的关系。在eclip…

php 高效缓存类,简单高效的文件缓存php类

简单高效的文件缓存php类class FileCache{public $keyPrefix ;public $cachePath ;public $cacheFileSuffix .bin;public $directoryLevel 1;public $gcProbability 10;public $fileMode;public $dirMode 0775;function __construct(){$this->cachePath HT::$cacheRo…

Java四种访问权限

java基础(七) java四种访问权限 引言 Java中的访问权限理解起来不难&#xff0c;但完全掌握却不容易&#xff0c;特别是4种访问权限并不是任何时候都可以使用。下面整理一下&#xff0c;在什么情况下&#xff0c;有哪些访问权限可以允许选择。 一、访问权限简介 访问权限控…

php表单提取,php – 使用RegEx提取表单字段

使用正则表达式解析HTML可能不是最好的方法.您可以查看DOMDocument::loadHTML,这将允许您使用DOM方法处理HTML文档(例如,如果您知道这些,则使用XPath查询).您可能还想看一下Zend_Dom和Zend_Dom_Query,顺便说一句,如果您可以在应用程序中使用Zend Framework的某些部分,这是非常好…

phpexcel.php实际应用,PHP操作excel的一个例子(原创)-PHP教程,PHP应用

这是对于那些只喜欢简单处理一下excel朋友来说的//定义一个excel文件$workbook "c:/my documents/test.xls";$sheet "sheet1";//生成一个com对象$ex$ex new com("excel.sheet") or die ("连不上&#xff01;&#xff01;&#xff01;&qu…

集成 websocket 的四种方案

集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>WebSocketConfig package cn.coder4j.study.exampl…

java异常不懂,看不懂的异常提示啊

当前位置:我的异常网 Java Web开发 看不懂的异常提示啊看不懂的异常提示啊www.myexceptions.net 网友分享于&#xff1a;2013-09-12 浏览&#xff1a;7次看不懂的错误提示啊&#xff01;&#xff01;&#xff01;&#xff01;写的一个JSP程序&#xff0c;运行时提示如下错误…