jfinal 调用mysql结果集-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

jfinal 调用mysql结果集

小旋风柴进 2016-03-11 15:21:53 2639

你好,想跟你请教个问题:我的mysql写了一个存储过程,如何通过jfinal调用这个存储过程的结果集赋值到list呢?

MYSQL的存储过程

BEGIN
  SELECT * FROM s_range  LIMIT _offset,_rows;
END
云服务器登录 云服务器设置
分享到
取消 提交回答
全部回答(1)
  • 小旋风柴进
    2019-07-17 18:59:22

    我的做法是:

    1、写一个过程调用类,实现ICallback接口,完整代码如下:

    
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.List;
    
    import oracle.jdbc.OracleTypes;
    
    import com.jfinal.plugin.activerecord.ICallback;
    import com.jfinal.plugin.activerecord.Model;
    import com.jfinal.plugin.activerecord.ModelBuilder;
    
    
    /**
     * 统计分析数据
     * @author Administrator
     *
     */
    public class ProcedureTool implements ICallback {
        private Object[] paras;
        private String procedure;
        private List<?> result;
        @SuppressWarnings("rawtypes")
        private Class<? extends Model> mdClass;
        
        /** 
         * @param proc 存储过程名称及参数:如 prcName(?,?,?,?)
         * @param paras 输入\输出 参数,默认最后一个为游标参数
         */
        @SuppressWarnings("rawtypes")
        public void setParas(Class<? extends Model> modelClass,String proc,Object...paras){
            procedure=proc;
            this.paras=paras;
            mdClass=modelClass;
            
        }
        
        /**
         * 结果集
         * @return
         */
        public List<?> getResultList(){
            return result;
        }
        
        
        @Override
        public Object run(Connection conn) throws SQLException {
            // TODO Auto-generated method stub
            CallableStatement proc = null;
            result=null;
            proc = conn.prepareCall("{ call "+procedure+" }");
    
            for (int i=0; i<paras.length; i++) {
                proc.setObject(i + 1, paras[i]);
            }
            proc.registerOutParameter(paras.length+1, OracleTypes.CURSOR);
    
            proc.execute();
            
            ResultSet rs = (ResultSet) proc.getObject(paras.length+1);
            
            try {
                result=ModelBuilder.build(rs, mdClass);
            } catch (InstantiationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            return null;
            
        }
    
    }

    2、调用getResultList就可以得到结果集了。

    以上就是大概思路

    南客南客 9个月前
    引用来自“车开源”的评论
    我的做法是:

    1、写一个过程调用类,实现ICallback接口,如下:

    public class ProcedureTool implements ICallback {
        private Object[] paras;
        private String procedure;
        private List<?> result;
        @SuppressWarnings("rawtypes")
        private Class<? extends Model> mdClass;
        
        /** 
         * @param proc 存储过程名称及参数:如 prcName(?,?,?,?)
         * @param paras 输入\输出 参数,默认最后一个为游标参数
         */
        @SuppressWarnings("rawtypes")
        public void setParas(Class<? extends Model> modelClass,String proc,Object...paras){
            procedure=proc;
            this.paras=paras;
            mdClass=modelClass;
            
        }
        
        /**
         * 结果集
         * @return 
         */
        public List<?> getResultList(){
            return result;
        }
        
        
        @Override
        public Object run(Connection conn) throws SQLException {
            // TODO Auto-generated method stub
            CallableStatement proc = null;
            result=null;
            proc = conn.prepareCall("{ call "+procedure+" }");
    
            for (int i=0; i<paras.length; i++) {
                proc.setObject(i + 1, paras[i]);
            }
            proc.registerOutParameter(paras.length+1, OracleTypes.CURSOR);
    
            proc.execute();
            
            ResultSet rs = (ResultSet) proc.getObject(paras.length+1);
            
            try {
                result=ModelBuilder.build(rs, mdClass);
            } catch (InstantiationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            return null;
            
        }
    
    }

    2、调用getResultList就可以得到结果集了。

    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

相似问题
最新问题
推荐课程