关于hibernate调用存储过程
来源:互联网 发布:大数据应用网站 编辑:程序博客网 时间:2024/05/23 12:50
使用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调用存储过程
- 关于使用 Hibernate 调用存储过程方法
- hibernate调用存储过程
- Hibernate调用存储过程
- hibernate调用存储过程
- hibernate 调用存储过程
- hibernate调用存储过程
- Hibernate调用存储过程
- Hibernate调用存储过程
- Hibernate --调用存储过程
- hibernate调用存储过程
- hibernate调用存储过程
- hibernate 调用存储过程
- hibernate调用存储过程
- Hibernate调用存储过程
- hibernate调用存储过程
- hibernate调用存储过程
- hibernate 调用存储过程
- STK 《Connect命令参考手册》首发
- Phonegap2.9.0本地打包html成ios应用
- Android 自定义控件之界面标题导航及控件打包共享
- PhoneGap2.9.0本地将html打包成Android应用
- ios UIWebView截获html并修改便签内容
- 关于hibernate调用存储过程
- HDU1588-Gauss Fibonacci(矩阵快速幂+等比数列二分求和)
- 浏览器的工作原理(一)
- 删除当前用户所有表
- Codeforces 67A. Partial Teacher
- PhoneGap2.9.0本地将html打包成Android应用
- chapter5
- 只有一个broker的例子
- django book笔记--问题2(chapter4 importError)