JFinal 3.0 是否支持存储过程的调用?特别是Oracle存储过程的调用?

  看了JFinal的手册,没有发现有关数据库存储过程的调用说明,不知道这方面JFinal是否支持?特别是Oracle存储过程的调用。

评论区

JFinal

2017-03-07 16:35

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

米子雷

2017-03-08 09:47

好的,明白了,我试试!

欲风217

2017-03-29 21:59

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

}

JFinal

2017-03-30 10:29

@欲风217 正解,感谢分享

醉梦灬浮生

2018-08-24 17:06

@欲风217 请问我的proc.getObject(1)报Parameter number 1 is not an OUT parameter是什么原因,
DROP PROCEDURE IF EXISTS delate_area;
CREATE PROCEDURE delate_area(in personId INT)
BEGIN

DECLARE t_error INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
START TRANSACTION;

DELETE FROM area WHERE area.id=personId;
IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
SELECT t_error;
END
我的存储过程是这样写的

欲风217

2018-08-29 17:19

@醉梦灬浮生 你的存储过程有返回值么?

醉梦灬浮生

2018-08-30 13:22

@欲风217 也没有返回值,不知道是哪里出了问题

欲风217

2018-08-31 16:41

@醉梦灬浮生 我的意思是,你的存储过程在 plsql 中调用时有返回值吗?我从代码中貌似没看到有返回值。

七五热

2018-12-10 16:50

jfinal 支持一下方式:
Record findFirst = Db.findFirst("CALL SelMaLandlordMonthMoney (1,\"201812\");");//调用存储过程 查询通过

int update = Db.update("CALL UpdOptsLandlord (2,'aa','1234567890','232724111111111111','','','')");//调用存储过程修改完成OptsLandlord表

int update2 = Db.update("CALL InsMainLandlordMoney (2,2,3,9999.99)");//调用存储过程添加MainLandlordMoney

极简又拉风,每日jfinal。

七五热

2019-02-15 15:24

int delete = Db.delete("CALL DELETE_sspc_monitor_log();");//调用成功 补充

puzzle

2019-06-10 16:59

@七五热 问下大佬,如果delete里面需要传入参数,这个是怎么写的?

puzzle

2019-06-11 10:26

int delete = Db.delete("CALL DELETE_sspc_monitor_log();");//调用成功 补充
@JFinal 问下大佬,如果delete里面需要传入参数,这个是怎么写的?

JFinal

2019-06-11 11:36

@puzzle 更灵活的存储过程使用方式,见文档:
https://www.jfinal.com/doc/5-16

puzzle

2019-06-12 13:38

@JFinal
大佬问下:
Record first = Db.findFirst("CALL FindSalary (1,\"201901\")");
这种简单的写法,如果查询的条件是动态的,应该如何写?

JFinal

2019-06-12 17:57

@puzzle 存储过程要参考文档中的标准用法:https://www.jfinal.com/doc/5-16

七五热

2019-08-13 09:51

@puzzle 你这问的就是最基础的存储过程了。。。。,这个跟框架没关系的,补充下知识,存储过程

热门反馈

扫码入社