Hibernate4获取Connection,ResultSet对象

2016/04/03 20:22
阅读数 990

在比较老的hibernate里面,可以用下面的代码获取connection,还有其他对象。

public class test {

    public List method(String sql) {         
       Connection conn = null;         
       PreparedStatement ps = null;        
       ResultSet rs = null;         
       List ret = new ArrayList();         
       try {             
             conn = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();            
             ps = conn.prepareStatement(sql);             
             rs = ps.executeQuery();             
             while (rs.next()) {       
                    /////             
             }             
       ret.add(rs);        
       } 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对象。所以Hibernate提供了一个能传递返回值得的方法doReturningWork() 。直接上我项目中的代码:

 

public String CheckLogin(String username, String password) throws SQLException {
        String id = null;
        final String sql = "select * from Student where Student_Username='" + username + "' and Student_Password='"
                + password + "' and Student_State='入住'";
        Session session = HibernateSessionFactory.getSession();
        ResultSet rs = session.doReturningWork(new ReturningWork<ResultSet>() {

            @Override
            public ResultSet execute(Connection connection) throws SQLException {
                PreparedStatement preparedStatement = connection.prepareStatement(sql);
                ResultSet rs = preparedStatement.executeQuery();
                return rs;
            }
        });

        while (rs.next()) {
            id = rs.getString("Student_ID");
        }
        return id;
    }

通过内部类,把resultset对象一层一层返回给这个doReturnWork,这样就可以像用jdbc一样使用hibernate了。

 

 

展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部