我是靠谱客的博主 危机小霸王,最近开发中收集的这篇文章主要介绍java调用存储过程的通用封装_Java调用存储过程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java调用存储过程

public static void main(String[] args ){

String driver = "oracle.jdbc.driver.OracleDriver";

String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";

Statement stmt = null;

ResultSet rs = null;

Connection conn = null;

try {

Class.forName(driver);

conn = DriverManager.getConnection(strUrl,

"hyq", "hyq");

CallableStatement proc = null;

proc = conn.prepareCall("{ call hyq.testc(?)

}");

proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);

proc.execute();

rs = (ResultSet)proc.getObject(1);

while(rs.next())

//调用存储过程 删除流程相关记录

String procdure = "{Call sp_deleteInstByRootID(?)}";

CallableStatement cs = this.getHibernateTemplate().getSessionFactory().getCurrentSession().connection().prepareCall(procdure);

//this.getSession().connection().prepareCall(procdure).setString(0, orgdefid);

cs.setString(1, procinstid);

cs.execute();

ibatis配置文件:

复制代码

id="parameterMapCesu" class="java.util.Map">

jdbcType="VARCHAR2"

javaType="java.lang.String" mode="IN" />

jdbcType="DOUBLE" javaType="java.lang.Long"

mode="OUT"/>

id="cesu" parameterMap="parameterMapCesu">

{call handiwork(?,?)}

Java代码

public Long doTest(final String cesuDate) {

return (Long) this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() {

@SuppressWarnings("unchecked")

public Object doInSqlMapClient(SqlMapExecutor executor)

throws SQLException {

long csCount = 0;

try {

//设置存储过程参数

Map cesu = new HashMap();

cesu.put("cesuDate", cesuDate);//输入参数

cesu.put("csCount", 0);//输出参数

//调用存储过程

executor.queryForObject("test.cesu",cesu);//ibatis文件的namespace是test

csCount = (Long)cesu.get("csCount");//获取返回值

return csCount;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

});

}

/**

* 直接调用存储过程

* @param procString

* @author kongqz

* @throws Exception

* @date 2009-03-03

* **/

public void callProcedure(String procString,List params) throws Exception {

CallableStatement stmt = null;

try {

stmt = this.getSession().connection().prepareCall(procString);

if (params != null){

int idx = 1;

for (Object obj : params) {

if (obj != null) {

stmt.setObject(idx, obj);

} else {

stmt.setNull(idx, Types.NULL);

}

idx++;

}

}

stmt.execute();

} catch (SQLException e) {

e.printStackTrace();

throw new Exception("调用存储过程的时候发生错误[sql = " + procString + "]", e);

}

}

tx = session.beginTransaction();

Connection con=session.connection();

String procedure = "{call batchUpdateStudent(?) }";

CallableStatement cstmt = con.prepareCall(procedure);

cstmt.setInt(1,0); //把年龄参数设为0

cstmt.executeUpdate();

tx.commit();

1.继承StoredProcedure

org.springframework.jdbc.object.StoredProcedure是对应存储过程调用的操作对象,它通过其父类

org.springframework.jdbc.object.SqlCall获得相应的底层API支持(CallableStatementCreator), 然

后在此基础之上构建了调用存储过程的执行方法。

2、重写父类的execute()方法。将存储过程的参数封装成Map类型的传入该方法

.

3、写一个方法来封装存储过程的方法及把参数放到Map里面.

如:

Map paraMap = new HashMap();

paraMap.put(IN_PARAMETER_NAME, tableName);

paraMap.put(INOUT_PARAMETER_NAME, v);

注意:key值一定要与前面构造函数里面声明的参数一致。

4、execute()返回的map值要取到里面的value值,可以用前面构造函数声明时候用到的key值去取。

如:(String)resultMap.get(OUT_PARAMETER_NAME);就得到了存储过程的返回值。

示例如下:

public class xxxxProcedure extends

StoredProcedure {

private static final String PROCEDURE_NAME =

"xxxx";

protected xxxxProcedure() {

/* empty */

}

public xxxxProcedure(JdbcTemplate jdbcTemplate) {

super(jdbcTemplate, PRO_NAME);

declareParameter(new

SqlParameter("xxxx", Types.VARCHAR));

declareParameter(new

SqlParameter("xxxx", Types.VARCHAR));

declareParameter(new

SqlParameter("xxxx", Types.NUMERIC));

}

public void execute(String xxxx,String xxxx,int xxxx) {

Map paramsIn = new

HashMap();

paramsIn.put("xxxx", xxxx);

paramsIn.put("xxxx", xxxx);

paramsIn.put("xxxx", xxxx);

super.execute(paramsIn);

}

}

在mybatis中调用存储过程,然后获取该结果集:

1、xml配置文件

encoding="UTF-8" ?>

/p>

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

id="resultMap">

javaType="java.lang.Integer" jdbcType="INTEGER"/>

javaType="java.lang.String" jdbcType="VARCHAR"/>

property="repDate" javaType="java.lang.String"

jdbcType="VARCHAR"/>

property="summ" javaType="java.lang.Long"

jdbcType="BIGINT"/>

parameterType="java.util.Map"  resultMap="resultMap"

statementType="CALLABLE" >

{call pro_sql_data(

#{obj,jdbcType=VARCHAR,mode=IN}

)

}

Java代码

public String query(String param)

throws Exception {

logger.info(param);

Map queryMap = new HashMap();

queryMap.put("obj", param);

//List listIis1 = reportDao.select4MapParam(queryMap,

"currentSql");

List listIis2 =reportDao.select4MapParam(queryMap,"test123");

return JSONArray.fromObject(listIis2).toString();

}

最后

以上就是危机小霸王为你收集整理的java调用存储过程的通用封装_Java调用存储过程的全部内容,希望文章能够帮你解决java调用存储过程的通用封装_Java调用存储过程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部