存储过程用一下 Db.execute(ICallback) 这个方法,在其中用一下:
connection.prepareCall(sql).execute();
就可以调用存储过程了,并且还可以自由控制返回值

例子:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;

import com.jfinal.core.ActionKey;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.ICallback;

import oracle.jdbc.OracleTypes;

public class AccessToken extends Controller {

@ActionKey("token/get")
public void applyToken() {

Object o = Db.execute(new ICallback() {
@Override
public Object call(Connection conn) throws SQLException {
CallableStatement proc = conn.prepareCall("{?=call eops_xxx.bbb(?,?)}");
proc.registerOutParameter(1, OracleTypes.INTEGER);
proc.setString(2, "证书");
proc.registerOutParameter(3, OracleTypes.VARCHAR);
proc.execute();
return proc.getObject(3);
}
});

renderJson(o.toString()));
}

}

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

public Boolean setVarValue(final String processInstanceId, final String varName, final String varValue) {
Boolean flag = false;
Object o = Db.execute(new ICallback() {
@Override
public Boolean call(Connection conn) throws SQLException {
Boolean flag = false;
try {
CallableStatement proc = conn.prepareCall("{CALL PROCESS_WARN.set_var_value(?,?,?)}");
proc.setString(1, processInstanceId);
proc.setString(2, varName);;
proc.setString(3, varValue);
proc.execute();
//代码来到这里就说明你的存储过程已经调用成功,如果有输出参数,接下来就是取输出参数的一个过程
flag = true;
} catch (Exception e) {
flag = false;
log.error("execute procedure PROCESS_WARN.set_var_value mistakes !!!");
e.printStackTrace();
}
return flag;
}
}); flag = (Boolean) o; return flag;
}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、

有返回值的

public String activeTaskForUpdate(final String processInstanceId,
final String operationClassKey, final String operationKey, final String taskOrgId,
final String orgFilterId, final String otherTag,final String newType) {
String task_id_list = "";
Object o = Db.execute(new ICallback() {
@Override
public String call(Connection conn) throws SQLException {
String task_id_list = "";
try {
CallableStatement proc = conn.prepareCall("{CALL PROCESS_WARN.active_task_for_update(?,?,?,?,?,?,?,?)}");
proc.setString(1, processInstanceId);
proc.setString(2,operationClassKey);
proc.setString(3, operationKey);
proc.setString(4, taskOrgId);
proc.setString(5, orgFilterId);
proc.setString(6, otherTag);
proc.setString(7, newType);
proc.registerOutParameter(8, oracle.jdbc.OracleTypes.VARCHAR);
proc.execute();
//代码来到这里就说明你的存储过程已经调用成功,如果有输出参数,接下来就是取输出参数的一个过程
task_id_list = proc.getObject(8).toString();
} catch (Exception e) {
log.error("execute procedure PROCESS_WARN.active_task_for_updatemistakes !!!");
e.printStackTrace();
if(e.getMessage().indexOf("ORA-20012") != -1){
String msg = e.getMessage().split("#")[1];
throw new NoAssigneeException(msg);
}else{
throw new SystemUnKnownException(e.getMessage());
}
}
return task_id_list;
}
}); task_id_list = (String) o;
return task_id_list;
}

jfinal如何调用存储过程?的更多相关文章

  1. spring data jpa 调用存储过程

    网上这方面的例子不是很多,研究了一下,列出几个调用的方法. 假如我们有一个mysql的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `plus1in ...

  2. myabatis oracle 调用存储过程返回list结果集

    Mapper.xml 配置 <resultMap type="emp" id="empMap"> <id property="emp ...

  3. IBatis.Net使用总结(四)-- IBatis 调用存储过程

    IBatis 调用存储过程 http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html http://www.c ...

  4. SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

    我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...

  5. 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】

    疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...

  6. MyBatis学习总结(六)——调用存储过程(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013518.html 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存 ...

  7. C# 调用存储过程操作 OUTPUT参数和Return返回值

    本文转载:http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html 存储过程是存放在数据库服务器上的预先编译好的sql语句.使用存 ...

  8. jdbc调用存储过程和函数

    1.调用存储过程 public class CallOracleProc { public static void main(String[] args) throws Exception{ Stri ...

  9. jdbc执行预处理,批处理,LOB字段处理,调用存储过程

    (1)jdbc执行预处理 PreparedStatment预备语句 eg:String sql="insert into user(id,name,birthday,money) value ...

随机推荐

  1. Swift 的 pod 第三方库

    #HTTPpod 'Alamofire' #Elegant HTTP Networking in Swiftpod 'SwiftHTTP' #Thin wrapper around NSURLSess ...

  2. GameObject非激活状态,触发测试

    测试结果为OnEnable,Start不执行.Awake不管激活未激活都执行 不管是驻留在层级面板,还是手动拖上去. 但是,在任何时间设为激活.就会2个都触发.Awake和Start只触发一次.这个问 ...

  3. svn move (mv,rename,ren)

    svn 重命名文件: [root@NGINX-APACHE-SVN pro]# svn move 20160624新建数据库表.txt 201.txt A 201.txt D 20160624新建数据 ...

  4. TIM—高级定时器

    本章参考资料:< STM32F4xx 参考手册>.< STM32F4xx 规格书>.库帮助文档< stm32f4xx_dsp_stdperiph_lib_um.chm&g ...

  5. Roslyn介绍

    介绍 一般来说,编译器是一个黑箱,源代码从一端进入,然后箱子中发生一些奇妙的变化,最后从另一端出来目标文件或程序集.编译器施展它们的魔法,它们必须对所处理的代码进行深入的理解,不过相关知识不是每个人都 ...

  6. 一款基于jQuery的带文字标题上下切换焦点图

    今天给大家分享一款很实用的jQuery焦点图插件,它的最大特点就是使用非常方便,而且实现相对比较简单.焦点图的图片下方悬浮文字链接,鼠标滑过文字时即可切换至相应的图片,在图片切换的过程中出现淡入淡出的 ...

  7. 一款纯html5实现的时钟

    今天给大家分享一款非常漂亮的纯html5实现的时钟.整个界面都由html5绘制而成.一起看下效果图: 在线预览   源码下载 实现的代码. html代码: <div class="co ...

  8. sama5d36 OUT0-OUT3 对应关系 带光模块的系统

    ARM-IO9      PA8     OUT0 ARM-IO10    PA1     OUT1 ARM-IO11    PA3     OUT2 ARM-IO12    PA9     OUT3

  9. thinkphp 设置 支持模块多组

    正常的访问地址是:localhost/项目名/index.php/Admin/Index/index 模块分组之后呢:localhost/项目名/index.php/Admin/System/Inde ...

  10. Thinkphp3.2 PHPMailer 发送 QQ邮箱 163邮箱

    在进入正题这前先看下网易(163)邮箱的服务器地址和端口号 类型 服务器名称 服务器地址 SSL协议端口号 非SSL协议端口号 收件服务器 POP pop.163.com 995 110 收件服务器 ...