當前位置:首頁 » 存儲配置 » hibernate調用存儲過程返回值

hibernate調用存儲過程返回值

發布時間: 2022-12-11 17:43:07

⑴ Hibernate 調用存儲過程 該語句沒有返回結果集

修改存儲過程試試:
alter procere test()
as
SET NOCOUNT ON --加上這句話;有的出現這個問題,加上之後問題解決了;嘿嘿

⑵ hibernate中調用存儲過程,如果返回了多個結果集,怎麼處理

過程如下:
public Boolean doInHibernate(Session session)
throws HibernateException, sqlException {
try{
Transaction tr = session.beginTransaction();
SQLQuery query = session.createSQLQuery("{call CommandAdapter(?,?,?,?)}");
query.setString(0,"ls");
query.setInteger(1, machineid);
query.setString(2, param);
query.setInteger(3, 0); //
query.executeUpdate();
tr.commit();
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}finally{

session.close();

}
}

使用hibernate調用帶參數返回值的存儲過程方法

在調用帶參數返回值的方法時,需使用到CallableStatement對象。因此,首先得設法獲取一個Connection。

獲取Connection 方法:

(1)session.connection();//此方法目前已被棄用

(2)SessionFactoryUtils.getDataSource(sessionFactory).getConnection()


過我在使用SessionFactoryUtils.getDataSource(sessionFactory)時,一直獲取的都是空值,為此參考
SessionFactoryUtils的源代碼直接利用ConnectionProvider對象來獲取一個Connection實例。

完整代碼:

SessionFactory sessionFactory=this.getSessionFactory();
if (sessionFactory instanceof SessionFactoryImplementor){
ConnectionProvider cp = ((SessionFactoryImplementor) sessionFactory).getConnectionProvider();
try {

CallableStatement statement = cp.getConnection().prepareCall(
"{call MachineDataQuery(?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
statement.setInt(1, machineId);
statement.setInt(2, jobId);
statement.setInt(3, partTypeId);
statement.setInt(4, compentId);
statement.setInt(5, opId);
statement.setInt(6, roleId);
statement.setInt(7, userId);
statement.setString(8, sd);
statement.setString(9, ed);
statement.registerOutParameter(10, Types.FLOAT);
statement.registerOutParameter(11, Types.FLOAT);
statement.registerOutParameter(12, Types.FLOAT);
statement.registerOutParameter(13, Types.FLOAT);
statement.registerOutParameter(14, Types.FLOAT);
statement.execute();
System.out.println(statement.getFloat(10));
System.out.println(statement.getFloat(11));
System.out.println(statement.getFloat(12));
System.out.println(statement.getFloat(13));
System.out.println(statement.getFloat(14));
} catch (SQLException e) {
e.printStackTrace();
}finally{
cp.close();
}
}

ps:切記存儲過程中不可有多餘的print或select語句,否則會拋出異常「com.microsoft.sqlserver.jdbc.SQLServerException: 已生成用於更新的結果集。」

⑶ hibernate 存儲過程問題 Caused by: java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列: PLS-00905:

我想你java里定義的應該是float或者double類型吧?float是精確到小數點後6位,double是15位..所以你的222.00應該保存的比這個要更精確,而你的oracle里,只精確了兩位所以....就是這個錯誤了,其實如果要求不嚴的話,直接定義成number就行了,那麼接到的值是什麼精度什麼類型的他就自動存了.

⑷ EtityManager調用存儲過程報錯

在EJB3 中你可以調用的存儲過程有兩種
1.無返回值的存儲過程。
2.返回值為ResultSet(以select 形式返回的值)的存儲過程(注意:EJB3不能調用以OUT參數返回值的存儲過程。)

下面我們看看幾種具有代表性的存儲過程的調用方法.

調用無返回值的存儲過程
首先創建一個名為AddPerson的存儲過程,他的DDL 如下(註:本例使用的是MySql資料庫):

CREATE PROCEDURE `AddPerson`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''

⑸ hibernate的增刪改的返回值是什麼

hibernate主要通過session對象進行增刪改查,


增刪改的如下三個方法:

session.update(obj)
session.save(obj)
session.delete(obj)

返回值都是void,如果發生增刪改的失敗,會拋出HibernateException,根據Hibernate框架設計,用戶應該用try...catch...處理,必要時進行事務的回滾(rollback)。

查詢的情況分多種,如:

session.load(class,obj)的處理與增刪改類似

而Queryquery=session.createQuery(HQLhql),如果是查詢語句錯誤,仍拋出HibernateException;

而如果資料庫沒有值,則然後用query.list()返回空列表;

如果有一些配置錯誤(如映射配置文件有錯),則query.list()會返回null,

所以仍應用try...catch統一處理保險一些。

⑹ hibernate 4.x中如何調用存儲過程

例子
public void saveStoredProcere(final String adminId, final String menuId, final String toolbars) {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
SQLQuery sqlQuery = session.createSQLQuery("{call P_SaveOperatorPopedom(?,?,?)}");
sqlQuery.setString(0, adminId);
sqlQuery.setString(1, menuId);
sqlQuery.setString(2, toolbarsXML);
sqlQuery.executeUpdate();
return null;
}
});
}

重點是這個寫法 session.createSQLQuery("{call P_SaveOperatorPopedom(?,?,?)}");
我這邊用的是spring提供的HibernateDaoSupport

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:600
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:892
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:586
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:771
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:690
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1017
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:261
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:120
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:810
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:719