概述
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调用存储过程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复