java hibernate 调用oracle存储过程

1.hibernate 调用存储过程 各种方法

http://www.cnblogs.com/jerryxing/archive/2012/04/28/2475762.html

如果底层数据库(如Oracle)支持存储过程,也可以通过存储过程来执行批量更新。存储过程直接在数据库中运行,速度更加快。在Oracle数据库中可以定义一个名为batchUpdateStudent()的存储过程,代码如下:

create or replace procedure batchUpdateStudent(p_age in number) as
begin
update STUDENT set AGE=AGE+1 where AGE>p_age;
end;

以上存储过程有一个参数p_age,代表学生的年龄,应用程序可按照以下方式调用存储过程:

tx = session.beginTransaction();
Connection con=session.connection();

String procedure = "{call batchUpdateStudent(?) }";
CallableStatement cstmt = con.prepareCall(procedure);
cstmt.setInt(1,0); //把年龄参数设为0
cstmt.executeUpdate();
tx.commit();

在以上代码中,我用的是Hibernate的 Transaction接口来声明事务,而不是采用JDBC API来声明事务。

3.有返回值的存储过程

Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();

CallableStatement cs = session.connection().prepareCall("{call Tj(?,?,?,?,?,?,?)}");//存储过程的名字,?是传入的参数

//设置参数值 我这里是设置了7个参数

cs.setString(1, startTime);

cs.setString(2, endTime);

cs.setString(3,"");

cs.setString(4,"5");

cs.setString(5,"60");

cs.setString(6,"240");

cs.setString(7,orderby);

//执行查询

ResultSet rs = cs.executeQuery();

while (rs.next()) {

System.out.println(rs.getInt(1));

}

上面的方式是返回了一个ResultSet

第二种方法:

通过强大的createSQLQuery来实现

    1. Session session =HibernateSessionFactory.getSession();
    2. SQLQuery query = session.createSQLQuery("{Call Tj(?)}"); //这里调用存储过程
    3. query.setString(1,"ddd");
    4. List list =query.list();
    5. session.close();
时间: 2024-10-17 21:20:54

java hibernate 调用oracle存储过程的相关文章

在java中调用Oracle存储过程

在java中调用Oracle存储过程 本文介绍如何通过java来调用Oracle的存储过程 1. 编写存储过程 CREATE OR REPLACE PROCEDURE sp_pro3(sp_name VARCHAR2,sp_sal NUMBER ) IS BEGIN --根据用户名修改工资 UPDATE emp SET sal=sp_sal WHERE ename=sp_name; END; 引入jdbc6.jar,编写测试类Test.java package testOraclePro; im

java代码调用oracle存储过程

一.简介 与调用mysql存储过程类型过程都是如下 1.创建连接 Connection conn = DriverManager.getConnection(url, user, password); 2.创建CallableStatement CallableStatement statement = conn.prepareCall(sql); 3.设置参数 statement.setInt(1, id); statement.registerOutParameter(2, Types.VA

Hibernate调用Oracle存储过程

因为每个设备都会采集的GPS数据,于是决定分表实现.最初想到的是用JDBC来实现,但是总会有意想不到的事情发生,很是郁闷(如摘要所言的问题).所以思前想后还是把这种SQL操作的事情让存储过程来干吧. 使用Hibernate实现存储过程调用有两种方式: 1.JDBC Call: Session session =HibernateSessionFactory.getSession();    Connection conn = session.connection();    ResultSet 

hibernate调用oracle存储过程||函数

pakeage dao.Impl; //调用函数FUN_GET(); public String get(String Id,String Name){ return getSession().createSQLQuery("select FUN_GET(?,?) from dual") .setParameter(0, Id).setParameter(1, Name).uniqueResult() .toString(); } //uniqueResult()  返回唯一值 //调

java基础---->java调用oracle存储过程(转)

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.今天,我们就开始学习java中调用oracle的存储过程. java中调用oracle的存储过程 项目结构如下: 一. 在数据库创建存储过程的脚本,如果使用的是本地的oracle数据库,则需要开启服务:OracleOraDb11g_home1TNSListener和OracleServiceORCL.

java基础---->java调用oracle存储过程

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.今天,我们就开始学习java中调用oracle的存储过程. java中调用oracle的存储过程 项目结构如下: 一. 在数据库创建存储过程的脚本,如果使用的是本地的oracle数据库,则需要开启服务:OracleOraDb11g_home1TNSListener和OracleServiceORCL.

oracle pl/sql之java中调用oracle有参存储过程

存储过程: create or replace procedure my_procedure(in_no in number,in_name in varchar2) is begin insert into emp(empno,ename) values(in_no,in_name); end; java程序演示: import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager

jdbc调用 oracle 存储过程操作

创建有参存储函数findEmpNameAndSal(编号),查询7902号员工的的姓名和月薪,[返回多个值,演示out的用法]当返回2个或多个值,必须使用out符号当返回1个值,就无需out符号 create or replace function findEmpNameAndSal(pempno in number,pename out varchar2) return numberas psal emp.sal%type;begin select ename,sal into pename,

java 实现往oracle存储过程中传递array数组类型的参数

注:本文来源于 <  java 实现往oracle存储过程中传递array数组类型的参数  > 最近项目中遇到通过往存储过程传递数组参数的问题, 浪费了N多个小时,终于有点头绪. 具体的代码就不写上了,因为项目中存储过程的调用方法全部是封装好的(好像现在都这样,都姓3层,嘿嘿) 原理: 1.一维数组 A.单纯的一维数组的话,直接建立一个table类型就可以 1 TYPE TYPE_VARCHAR AS TABLE OF VARCHAR2(200); 2.多维数组 A.多维数组就要稍加修改了,如