- 浏览: 62007 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
conan729:
太赞了,学习了!
Hibernate 详解 -
qingyue0530:
学习了,留言一个。六百多的访问量,一个留言的都没。俺就沙发了。 ...
用javascript 控制跳转页面 -
jyq45312:
那个ID 怎么获取不到啊????
flex页面传参
创建需要的测试表:create table Test(tid varchar2(10),tname varchar2(10)); 一:无返回值的存储过程 存储过程为: CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2); END TESTA; 然后呢,在 java 里调用时就用下面的代码: package com.hyq.src; import java.sql.*; import java.sql.ResultSet; public class TestProcedureOne { public TestProcedureOne() { } public static void main(String[] args ){ String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq "; Statement stmt = null; ResultSet rs = null; Connection conn = null; CallableStatement cstmt = null; try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, " hyq ", " hyq "); CallableStatement proc = null; proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }"); proc.setString(1, "100"); proc.setString(2, "TestOne"); proc.execute(); } catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2.printStackTrace(); } finally{ try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } } } } 当然了,这就先要求要建张表 TESTTB, 里面两个字段( I_ID , I_NAME )。 二:有返回值的存储过程(非列表) 存储过程为: CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS BEGIN SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1; END TESTB; 在 java 里调用时就用下面的代码: package com.hyq.src; public class TestProcedureTWO { public TestProcedureTWO() { } public static void main(String[] args ){ String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq"; Statement stmt = null; ResultSet rs = null; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, " hyq ", " hyq "); CallableStatement proc = null; proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }"); proc.setString(1, "100"); proc.registerOutParameter(2, Types.VARCHAR); proc.execute(); String testPrint = proc.getString(2); System.out.println("=testPrint=is="+testPrint); } catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2.printStackTrace(); } finally{ try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } } } } } 注意,这里的 proc.getString(2) 中的数值 2 并非任意的,而是和存储过程中的 out 列对应的,如果 out 是在第一个位置,那就是 proc.getString(1) ,如果是第三个位置,就是 proc.getString(3) ,当然也可以同时有多个返回值,那就是再多加几个 out 参数了。 三:返回列表 由于 oracle 存储过程没有返回值,它的所有返回值都是通过 out 参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用 pagkage 了 . 所以要分两部分, 1, 建一个程序包。如下: CREATE OR REPLACE PACKAGE TESTPACKAGE AS TYPE Test_CURSOR IS REF CURSOR; end TESTPACKAGE; 2 ,建立 存储过程,存储过程为: CREATE OR REPLACE PROCEDURE TESTC (p_CURSOR out TESTPACKAGE.Test_CURSOR) IS BEGIN OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB; END TESTC; 可以看到,它是把游标(可以理解为一个指针),作为一个 out 参数来返回值的。 在 java 里调用时就用下面的代码: package com.hyq.src; import java.sql.*; import java.io.OutputStream; import java.io.Writer; import java.sql.PreparedStatement; import java.sql.ResultSet; import oracle.jdbc.driver.*; public class TestProcedureTHREE { public TestProcedureTHREE() { } public static void main(String[] args ){ String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq"; Statement stmt = null; ResultSet rs = null; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, "hyq", "hyq"); CallableStatement proc = null; proc = conn.prepareCall("{ call hyq.testc(?) }"); proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR); proc.execute(); rs = (ResultSet)proc.getObject(1); while(rs.next()) { System.out.println("<tr><td>" + rs.getString(1) + "</td><td>"+rs.getString(2)+"</td></tr>"); } } catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2.printStackTrace(); } finally{ try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } } } } 在这里要注意,在执行前一定要先把 oracle 的驱动包放到 class 路径里,否则会报错的。 Hibernate调用oracle存储过程 this.pnumberManager.getHibernateTemplate().execute( newHibernateCallback()...{ publicObjectdoInHibernate(Sessionsession) throwsHibernateException,SQLException...{ CallableStatementcs=session.connection().prepareCall("{callmodifyapppnumber_remain(?)}"); cs.setString(1,foundationid); cs.execute(); returnnull; } });
发表评论
-
Enum 枚举
2015-02-04 10:46 711原文地址:http://www.cnblogs.com/K ... -
自定义annotation
2015-02-02 14:47 669Java annotation 自定义注释@interfac ... -
Java反射
2014-12-05 17:05 1原文地址:http://www.cnblogs.com/ro ... -
Java反射
2014-12-05 17:04 874原文地址:http://www.cnblogs.com/ro ... -
HttpClient
2014-11-11 15:02 669/** * 可以传对象的请求转发,对象已流形式放入HTT ... -
JAVA 节假日 判断和配置
2011-08-11 22:12 2680JAVA 节假日 判断和配置 实现类Festiva ... -
Java多线程程序设计
2010-10-28 21:18 912一:理解多线程多线 ... -
过滤器和拦截器的区别
2010-08-25 20:29 2630过滤器和拦截器的区别1、拦截器是基于java的反射机制的,而过 ... -
jdbc批量操作
2010-07-17 12:21 966package lavasoft.jdbctest; ... -
PO类在数据层和VO类在逻辑层的区别
2010-06-18 15:26 1203理解PO类在数据层和VO类 ... -
JAVA基础
2010-06-10 15:15 1047final关键字的使用,抽 ... -
JDBC常用连接URL
2009-07-12 18:04 9311、Oracle8/8i/9i数据库(thin模式) Cla ...
相关推荐
本文将详细介绍使用Java调用存储过程的三种方法:通过Hibernate框架、使用JDBC原生方式以及结合Hibernate的SQLQuery接口。 #### 一、通过Hibernate框架调用存储过程 Hibernate是一个非常流行的Java持久化框架,它...
而Hibernate作为一种流行的Java持久化框架,它允许开发者通过ORM(对象关系映射)方式与数据库进行交互。本篇文章将深入探讨如何使用Hibernate的Query接口来调用Oracle的存储过程和函数,以及提供相关的示例代码和...
总的来说,Java调用Oracle存储过程并通过游标返回临时表是一种常见的数据处理方式,它结合了数据库的强大功能和Java的灵活性,为复杂业务场景提供了高效解决方案。在处理大量数据时,正确地管理和使用游标至关重要,...
本篇文章将深入探讨如何在Hibernate框架中调用存储过程,并与JDBC调用存储过程的方式进行比较。 首先,我们要了解存储过程是什么。存储过程是预编译的SQL语句集合,存储在数据库服务器中,可被多次调用,减少了网络...
然而,有时我们需要执行更复杂的SQL任务,如存储过程,这时就需要了解如何通过Hibernate来调用存储过程。下面将详细解释Hibernate调用存储过程的相关知识点。 1. **存储过程的概念** 存储过程是预编译的SQL语句...
hibernate本对数据库的操作有些不完美,有必要的时候可以调用存储过程来补足。
本文将深入探讨如何使用Hibernate调用存储过程,并结合提供的资源文件——`proc.sql`、`hibernateProc.sql`和`hibernateProc.java`,来阐述具体的操作步骤和注意事项。 首先,我们理解存储过程的意义。存储过程可以...
调用 MySQL 过程和函数是 Java-Hibernate 框架中的一种重要技术,通过使用 CallableStatement 对象和 registerOutParameter() 方法,我们可以轻松地调用 MySQL 中的过程和函数,从而实现复杂的业务逻辑。
在hibernate中调用oracle中的存储过程的详细代码。可以借鉴使用,帮助学习。
### Hibernate调用存储过程详解 #### 一、建立存储过程 在进行Hibernate调用存储过程之前,首先需要在数据库中创建存储过程。本例中创建了一个名为`getUserInfo`的简单存储过程,其功能是从`user`表中选择所有记录...
综上所述,Hibernate调用存储过程是一种常见的做法,它允许开发者充分利用数据库的功能,同时保持应用的灵活性。理解如何在Hibernate中操作存储过程对于Java开发人员来说是必备技能之一。通过实践和学习,你可以更...
例如,你可以使用以下代码片段来调用存储过程: ```java Session session = sessionFactory.openSession(); session.doWork(new Work() { @Override public void execute(Connection connection) throws ...
综上所述,Java调用存储过程涉及到JDBC API的使用,包括建立连接、创建CallableStatement、设置和获取参数、执行存储过程以及关闭资源。熟练掌握这些步骤对于进行数据库交互的Java开发至关重要。
它允许我们编写原生的SQL语句,包括调用存储过程,然后映射结果到Java对象。 三、具体步骤 1. **创建SQL查询** 使用Session的createSQLQuery方法,传入存储过程的调用语句。例如: ```java Session session = ...
#### 三、Hibernate调用存储过程的方法 在Hibernate中调用存储过程通常有两种方式:通过`Query`接口或使用`StoredProcedureQuery`。这里我们主要介绍使用`StoredProcedureQuery`的方式,因为这种方式更适合处理复杂...
- **ORM框架**:Object-Relational Mapping(ORM)框架如Hibernate和Entity Framework也支持调用存储过程,开发者可以在ORM的映射配置中指定存储过程,然后在代码中像调用普通方法一样调用它。 3. **参数传递** -...
下面将详细介绍如何在Java中利用Hibernate调用MySQL的存储过程和函数。 首先,我们需要理解CallableStatement接口,它是PreparedStatement的子接口,用于执行SQL存储过程。在Java中,我们通常使用CallableStatement...
结合Spring和Hibernate,你可以在Spring的Service层使用Hibernate的Session来调用存储过程,或者在Repository层通过JdbcTemplate或NamedParameterJdbcTemplate进行调用。具体选择哪种方式取决于你的项目结构和需求。...