Hibernate4獲取Connection,ResultSet對象


項目中需要一個json對象,封裝的時候,需要數據的列名。

在jdbc里面,可以有個ResultMetaData對象獲取列名字。因為我用的是hibernate,這個框架已經封裝了很多,一般是難以獲得resultset的。

經過不懈的bing和google(作為一個環保的准程序員,拒絕用百度了),發現在hibernate里面,可以獲得resultset對象。不過現在是hibernate4,比較新,獲取的方式改變了不少。

在之前的hibernate里面,可以用下面的代碼獲取connection,還有其他對象。

     java.sql.Connection c = null;
        java.sql.PreparedStatement ps = null;
        java.sql.ResultSet rs = null;

public List   method(String sql) {
        List ret = new ArrayList();
        try {
        c =SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
            ps = c.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()) {
                 .....
                }
                ret.add(ro);
            }
        } catch (Exception e) {
             e.printStackTrace();

       } finally {
           close();
        }
        return ret;
    }

這樣,可以像jdbc一樣,使用resultset等對象。

但是在hibernate4里面,方法已經改了,SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection() 這一句已經不能使用,換的是新的方法。

如下:

 

getSession().doWork(new Work() {
    @Override
    public void execute(Connection connection) {
                
    }
});

 

在方法體里面,可以直接使用connection了。

但是這樣,返回的是一個void,而我要取用的是獲得resultset對象。好在IDE有智能提示,發現里面有一個能傳遞返回值得的方法,算是上面一種方法的擴展吧。

直接上我項目中的代碼:

 @Test
    public void tests() throws SQLException {
        Session session=HibernateSessionFactory.getSession();
        ResultSet resultSet=session.doReturningWork(
                new ReturningWork<ResultSet>() {
                    @Override
                    public ResultSet execute(Connection connection) throws SQLException {
                        String sql="select * from t_auth";
                        PreparedStatement preparedStatement=connection.prepareStatement(sql);
                        ResultSet resultSet=preparedStatement.executeQuery();
                        return resultSet;
                    }
                }
        );
        while (resultSet.next()){
            System.out.println("rs:"+resultSet.getString("authid"));
        }
    }

就是這個doReturnWork方法,里面通過內部類,把resultset對象一層一層返回給這個doReturnWork,這樣就可以像用jdbc一樣使用hibernate了。

個人一點心得,希望能給大家一些幫助。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM