2012-05-23 47 views
1

我有一個SQL服務器的功能,我想從休眠狀態調用它。 我測試了這兩種方法,但沒有人成功。 第一種方法:如何使用返回參數從hibernate調用sql服務器函數?

Session sixSession=HibernateUtil.getSessionFactory().openSession(); 
Query q2=sixSession.createQuery("from dbo.old_remaining(?)").setParameter("paymentVcode", p_Vcode); 
     q2.getNamedParameters(); 
     List list=sixSession.getNamedQuery("{dbo.old_remaining(?)}").setString(1,"p_Vcode").list(); 

dbo.old_remaining是我的功能和p_Vcode是一個int

的錯誤是:

unexpected token: (near line 1, column 23 [from dbo.old_remaining(?)] 

方法二:

Float var; 
List li=session.getNamedQuery("{dbo.old_remaining(?)}") 
    .setString(1, var).list(); 

的錯誤是: org.hibernate.MappingException:命名查詢不知道WN:{(?)dbo.old_remaining}

請幫我...

回答

1

可以提出各地根據一個CallableStatement的工作。該標準的JDBC語句來調用函數:

session.doWork(new Work() { 
    public void execute(Connection connection) throws SQLException { 
     CallableStatement callable = connection.prepareCall("{? = call dbo.old_remaining(?)}"); 
     callable.registerOutParameter(1, Types.FLOAT); 
     callable.setString(2, "your string parameter"); 
     callable.execute(); 
     float functionResult = callable.getFloat(1); 
    } 
}); 
+0

它拋出SQL異常! – AFF

+0

你能發佈異常嗎? – alexey28

+0

這裏是例外: – AFF

0

試試下面的代碼

session.doWork(new Work() { 
    public void execute(Connection conn) throws SQLException { 
     PreparedStatement pstmt = conn.prepareStatement("SELECT dbo.old_remaining(?)"); 
     pstmt.setString(1,p_Vcode); 
     ResultSet rs = pstmt.executeQuery(); 
     while(rs.next()) 
     System.out.println(rs.getFloat(1)) ; 
    } 
}); 
相關問題