日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2025/3/12 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA解析存储过程获取的对象_java 解析数据的存储过程的 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先定義枚舉:

public enum ProcParamType {

IN,OUT

}

調(diào)用存儲(chǔ)過(guò)程的描述

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; //出參數(shù)時(shí)指定sqlType

/**

* 入?yún)?shù)構(gòu)造函數(shù)

* @param index

* @param paramValue

*/

public ProcParam(int index,? Object paramValue) {

super();

this.index = index;

this.paramType = ProcParamType.IN;

this.paramValue = paramValue;

}

/**

* 出參數(shù)構(gòu)造函數(shù)

* @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;

}

}

}

服務(wù)類(lèi):

@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類(lèi)型直接轉(zhuǎn)換成ListOfMap結(jié)構(gòu)

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測(cè)試類(lèi):

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); ??? } }

總結(jié)

以上是生活随笔為你收集整理的JAVA解析存储过程获取的对象_java 解析数据的存储过程的的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。