|
本人最近也是在学习用WeX5开发一个移动产品,数据库是mysql,需要执行一个存储过程,这个存储过程是带输入和输出参数的。现在贴出源码分享给大家.
整体思路:
1、写一个执行存储过程的方法:java文件;
2、创建一个服务.m文件
3、前端通过传入参数执行。
java文件源码如下:
package iKr;
import java.sql.CallableStatement;
import java.sql.Connection;
import javax.naming.NamingException;
import com.alibaba.fastjson.JSONObject;
import com.justep.baas.action.ActionContext;
import com.justep.baas.data.sql.SQLException;
public class ExcPro {
public static JSONObject execExchange(JSONObject params, ActionContext context) throws SQLException,NamingException,java.sql.SQLException{
String UserID = params.getString("UserID");
String exUserID = params.getString("exUserID");
String OrderNo = params.getString("OrderNo");
Float balance = params.getFloat("Balance");
Integer sClass = params.getInteger("sClass");
Integer sType = params.getInteger("sType");
String exMemo = params.getString("exMemo");
Integer iResult = -1;
//将存储过程的输出参数通过jsonOBJ返回前台
JSONObject jsonObj = new JSONObject();
Connection conn = context.getConnection("iruKang");//数据源,不是数据库名称
CallableStatement cstmt = conn.prepareCall("{call proc_exchange(?,?,?,?,?,?,?,?)}"); //存储过程,有几个参数,就有几?号,包括输出参数
cstmt.setString(1, UserID);
cstmt.setString(2, exUserID);
cstmt.setString(3, OrderNo);
cstmt.setFloat(4, balance);
cstmt.setInt(5, sClass);
cstmt.setInt(6, sType);
cstmt.setString(7, exMemo);
//cstmt.setInt(8, iResult);
cstmt.registerOutParameter(8, java.sql.Types.INTEGER);//创建一个输出参数
try{
cstmt.execute();
iResult = cstmt.getInt(8);//执行完成后,取输出参数的值
jsonObj.put("iResult", iResult);//push到jsonObj中,返回到前端
return jsonObj;
}
finally{
conn.close();
}
}
}
2、服务的
3、前端调用 ,W文件
Model.prototype.div3Click = function(event){
debugger;
var params = {
"UserID": "22",
"exUserID":"5",
"OrderNo": "20180110203902",
"Balance": 700,
"sClass": 1,
"sType": 1,
"exMemo": "购买服务"
};
var self = this;
justep.Util.hint("发送成功!");
var success = function(resultData){
alert(resultData.iResult);
};
//先注释,已经发送成功了
justep.Baas.sendRequest({
"url": "/iKr/exchange",
"params": params,
"action": "exec_proc",
"success": success
});
希望可以帮到初学者
|
|