博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate 执行存储过程 方法
阅读量:5973 次
发布时间:2019-06-19

本文共 3508 字,大约阅读时间需要 11 分钟。

private SessionFactory sessionFactory;    public void setSessionFactory(SessionFactory sessionFactory) {        this.sessionFactory = sessionFactory;    }    /**     * 通过SQL执行无返回结果的存储过程(仅限于存储过程)     *      * @param queryString     * @param params     */    public void executeVoidProcedureSql(final String queryString, final Object[] params) throws Exception {        Session session = sessionFactory.getCurrentSession();        session.doWork(new Work() {            public void execute(Connection conn) throws SQLException {                ResultSet rs = null;                CallableStatement call = conn.prepareCall("{" + queryString + "}");                if (null != params) {                    for (int i = 0; i < params.length; i++) {                        call.setObject(i + 1, params[i]);                    }                }                rs = call.executeQuery();                call.close();                rs.close();            }        });    }    /**     * 通过存储过程查询(单结果集)     *      * @param sql     *            查询sql     * @param params     *            参数     * @param columnNum     *            返回的列数     * @return     */    public List
> find_procedure(final String sql, final Object[] params) throws Exception { final List
> result = new ArrayList
>(); try { Session session = sessionFactory.getCurrentSession(); session.doWork(new Work() { public void execute(Connection conn) throws SQLException { CallableStatement cs = null; ResultSet rs = null; cs = conn.prepareCall(sql); for (int i = 1; i <= params.length; i++) { cs.setObject(i, params[i - 1]);// 设置参数 } rs = cs.executeQuery(); ResultSetMetaData metaData = rs.getMetaData(); int colCount = metaData.getColumnCount(); while (rs.next()) { Map
map = new HashMap
(); for (int i = 1; i <= colCount; i++) { String colName = metaData.getColumnName(i); map.put(colName, rs.getObject(colName)); } result.add(map); } close(cs, rs); } }); return result; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 通过存储过程查询(多结果集) * * @param sql * 查询sql * @param params * 参数 * @param columnNum * 返回的列数 * @return */ public List
>> find_procedure_multi(final String sql, final Object[] params) throws Exception { final List
>> result = new ArrayList
>>(); try { // conn = // SessionFactoryUtils.getDataSource(sessionFactory).getConnection(); Session session = sessionFactory.getCurrentSession(); session.doWork(new Work() { public void execute(Connection conn) throws SQLException { CallableStatement cs = null; ResultSet rs = null; cs = conn.prepareCall(sql); for (int i = 1; i <= params.length; i++) { cs.setObject(i, params[i - 1]); } boolean hadResults = cs.execute(); ResultSetMetaData metaData = null; while (hadResults) { // 遍历结果集 List
> rsList = new ArrayList
>();// 用于装该结果集的内容 rs = cs.getResultSet();// 获取当前结果集 metaData = rs.getMetaData(); int colCount = metaData.getColumnCount();// 获取当前结果集的列数 while (rs.next()) { Map
map = new HashMap
(); for (int i = 1; i <= colCount; i++) { String colName = metaData.getColumnName(i); map.put(colName, rs.getObject(colName)); } rsList.add(map); } result.add(rsList); close(null, rs);// 遍历完一个结果集,将其关闭 hadResults = cs.getMoreResults();// 移到下一个结果集 } close(cs, rs); } }); return result; } catch (Exception e) { e.printStackTrace(); } return null; } private void close(CallableStatement cs, ResultSet rs) { try { if (cs != null) { cs.close(); } if (rs != null) { rs.close(); } } catch (Exception e) { e.printStackTrace(); } }

 

转载地址:http://pnbox.baihongyu.com/

你可能感兴趣的文章
实验三
查看>>
第一次实验总结
查看>>
openssh for windows
查看>>
PostgreSQL cheatSheet
查看>>
vue ...mapMutations 的第一个参数默认为 数据对象state
查看>>
其他排序
查看>>
Android Studio_更新Gradle
查看>>
leetcode 258. Add Digits——我擦,这种要你O(1)时间搞定的必然是观察规律,总结一个公式哇...
查看>>
[100]tar命令打包(排除目录或文件)
查看>>
查询应用服务器的会话数
查看>>
netty 源码分析
查看>>
浅谈ST表
查看>>
不完整类型
查看>>
Linux C++ 访问子目录以及里面的文件
查看>>
下载Android kernel
查看>>
s2sh框架整合具体配置-xml方式
查看>>
python 类的继承
查看>>
如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)- 续(附demo)(转)...
查看>>
一款数据加密共享与签名方案
查看>>
Cisco VTP中继协议配置
查看>>