当前位置:首页 » 存储配置 » 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