- 浏览: 955721 次
- 性别:
- 来自: 魔都
文章分类
- 全部博客 (745)
- MultiThread (19)
- My Plan (118)
- JavaBasic (61)
- MyInterview (104)
- InternetTechnique (5)
- ProjectConclusion (1)
- Maven (5)
- MogoDb (5)
- Hadoop (11)
- Memcached (6)
- TechniqueCollect (1)
- Ibaits (1)
- Android (34)
- ItLife (40)
- Tree (2)
- ProjectArchitect (7)
- Open Source (3)
- liunx (5)
- socket (8)
- Spring (27)
- DesginPattern (35)
- WebBasic (13)
- English (13)
- structs (1)
- structs2 (2)
- Oracle (17)
- Hibernate (2)
- JavaScript (4)
- Jdbc (1)
- Jvm (15)
- Ibatis (1)
- DataStructures (13)
- Https/Socket/Tcp/Ip (3)
- Linux (4)
- Webservice (7)
- Io (2)
- Svn (1)
- Css (1)
- Ajax (1)
- ExtJs (1)
- UML (2)
- DataBase (6)
- BankTechnique (3)
- SpringMvc (3)
- Nio (3)
- Load Balancing/Cluster (3)
- Tools (1)
- javaPerformanceOptimization (8)
- Lucene(SEO) (1)
- My Think (80)
- NodeJs (1)
- Quartz (1)
- Distributed-java (1)
- MySql (7)
- Project (4)
- junit (4)
- framework (1)
- enCache (1)
- git (2)
- SCJP (1)
- sd (1)
最新评论
-
lkjxshi:
你都这水平了还考这个证干嘛
SCJP 认证考试指南 -
钟逸华:
问的真多
百度java开发面试题(转) -
zuimeitulip:
觉得我就是这样的,从小阅读量就很少,导致现在的读的速度非常慢, ...
让读书成为一种习惯 -
DDT_123456:
我觉得你是不符合要求。问你hashmap的那个问题,你那样回答 ...
阿里面试2(转) -
jingjing0907:
刚刚写了很多读过此博客的感受,竟然没有发上去,以为我注册账号还 ...
让读书成为一种习惯
JavaOracleSQLJDBCHibernate
共4个
一.只有输入参数没有返回结果的存储过程
二. 有输入和有一个返回值的存储过程
三、返回多行记录的存储过程(返回的是游标)
四、Hibernate调用oracle存储过程
一.只有输入参数没有返回结果的存储过程
建表 create table table_1(id varchar2(10),name varchar2(10));
--没有返回值的存储过程
create or replace procedure prc_1(t_id in varchar2,t_name in varchar2)
as
begin
insert into table_1 values(t_id,t_name);
end prc_1;
1.在sql plus 中执行
SQL> exec prc_1('1','杨2');
PL/SQL procedure successfully completed
2. 在java 中执行,返回结果
Class.forName("oracle.jdbc.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
String user = "atf_ygj";
String password = "mas123";
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
cstmt = conn.prepareCall("{ call prc_1(?,?) }");
cstmt.setString(1, "100");
cstmt.setString(2, "TestOne");
cstmt.execute();
conn.commit();
========================================
二. 有输入和有一个返回值的存储过程
--有一个返回值的存储过程
create or replace procedure prc_2(t_id IN VARCHAR2,t_name OUT VARCHAR2) AS
begin
SELECT name INTO t_name FROM table_1 WHERE id= t_id and rownum<2;
end prc_2;
1. 在sql plus中执行,返回结果
SQL> var name varchar2(100);
SQL> exec prc_2('1',:name);
PL/SQL procedure successfully completed
name
---------
杨2
2. 在java 中执行,返回结果
Class.forName("oracle.jdbc.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
String user = "atf_ygj";
String password = "mas123";
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
cstmt = conn.prepareCall("{ call prc_2(?,?) }");
cstmt.setString(1, "1");
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.execute();
conn.commit();
String testPrint = cstmt.getString(2);
System.out.println("返回值:::::: " + testPrint);
输出:
返回值:::::: 杨2
三、返回多行记录的存储过程(返回的是游标)
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
1, 建一个程序包。
create or replace package test_package as
type test_CURSOR is ref cursor;
end test_package;
2,建立存储过程,存储过程为:
create or replace procedure prc_3(p_CURSOR out test_package.test_CURSOR) is
begin
OPEN p_CURSOR FOR SELECT * FROM table_1 order by id;
end prc_3;
可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
===========================
3.在java中的执行
Class.forName("oracle.jdbc.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
String user = "atf_ygj";
String password = "mas123";
conn = DriverManager.getConnection(url, user, password);
cstmt = conn.prepareCall("{ call prc_3(?) }");
cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cstmt.execute();
rs = (ResultSet) cstmt.getObject(1);
while (rs.next())
{
System.out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
}
输出结果:
<tr><td>1</td><td>杨2</td></tr>
<tr><td>100</td><td>TestOne</td></tr>
<tr><td>100</td><td>杨1</td></tr>
<tr><td>100</td><td>TestOne</td></tr>
<tr><td>200</td><td>Test2</td></tr>
4.在sql plus中执行
用一个存储过程调用prc_3
create or replace procedure prc_4 is
c test_package.test_CURSOR;
id varchar2(100);
name varchar2(100);
begin
prc_3(c);
LOOP
FETCH c INTO id,name;
EXIT WHEN c%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('=='||id||'==='||name);
END LOOP;
CLOSE c;
end prc_4;
执行
SQL> set serveroutput on;
SQL> exec dbms_output.enable(999999999999999999999);
PL/SQL procedure successfully completed
SQL> exec prc_4;
==1===杨2
==100===TestOne
==100===杨1
==100===TestOne
==200===Test2
PL/SQL procedure successfully completed
四、Hibernate调用oracle存储过程
private void prc_test()
{
getHibernateTemplate().execute(new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException, SQLException
{
CallableStatement cstmt = session.connection().prepareCall("{ call prc_3(?) }");
cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cstmt.execute();
ResultSet rs = (ResultSet) cstmt.getObject(1);
while (rs.next())
{
System.out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
}
return null;
}
}, true);
}
共4个
一.只有输入参数没有返回结果的存储过程
二. 有输入和有一个返回值的存储过程
三、返回多行记录的存储过程(返回的是游标)
四、Hibernate调用oracle存储过程
一.只有输入参数没有返回结果的存储过程
建表 create table table_1(id varchar2(10),name varchar2(10));
--没有返回值的存储过程
create or replace procedure prc_1(t_id in varchar2,t_name in varchar2)
as
begin
insert into table_1 values(t_id,t_name);
end prc_1;
1.在sql plus 中执行
SQL> exec prc_1('1','杨2');
PL/SQL procedure successfully completed
2. 在java 中执行,返回结果
Class.forName("oracle.jdbc.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
String user = "atf_ygj";
String password = "mas123";
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
cstmt = conn.prepareCall("{ call prc_1(?,?) }");
cstmt.setString(1, "100");
cstmt.setString(2, "TestOne");
cstmt.execute();
conn.commit();
========================================
二. 有输入和有一个返回值的存储过程
--有一个返回值的存储过程
create or replace procedure prc_2(t_id IN VARCHAR2,t_name OUT VARCHAR2) AS
begin
SELECT name INTO t_name FROM table_1 WHERE id= t_id and rownum<2;
end prc_2;
1. 在sql plus中执行,返回结果
SQL> var name varchar2(100);
SQL> exec prc_2('1',:name);
PL/SQL procedure successfully completed
name
---------
杨2
2. 在java 中执行,返回结果
Class.forName("oracle.jdbc.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
String user = "atf_ygj";
String password = "mas123";
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
cstmt = conn.prepareCall("{ call prc_2(?,?) }");
cstmt.setString(1, "1");
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.execute();
conn.commit();
String testPrint = cstmt.getString(2);
System.out.println("返回值:::::: " + testPrint);
输出:
返回值:::::: 杨2
三、返回多行记录的存储过程(返回的是游标)
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
1, 建一个程序包。
create or replace package test_package as
type test_CURSOR is ref cursor;
end test_package;
2,建立存储过程,存储过程为:
create or replace procedure prc_3(p_CURSOR out test_package.test_CURSOR) is
begin
OPEN p_CURSOR FOR SELECT * FROM table_1 order by id;
end prc_3;
可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
===========================
3.在java中的执行
Class.forName("oracle.jdbc.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
String user = "atf_ygj";
String password = "mas123";
conn = DriverManager.getConnection(url, user, password);
cstmt = conn.prepareCall("{ call prc_3(?) }");
cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cstmt.execute();
rs = (ResultSet) cstmt.getObject(1);
while (rs.next())
{
System.out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
}
输出结果:
<tr><td>1</td><td>杨2</td></tr>
<tr><td>100</td><td>TestOne</td></tr>
<tr><td>100</td><td>杨1</td></tr>
<tr><td>100</td><td>TestOne</td></tr>
<tr><td>200</td><td>Test2</td></tr>
4.在sql plus中执行
用一个存储过程调用prc_3
create or replace procedure prc_4 is
c test_package.test_CURSOR;
id varchar2(100);
name varchar2(100);
begin
prc_3(c);
LOOP
FETCH c INTO id,name;
EXIT WHEN c%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('=='||id||'==='||name);
END LOOP;
CLOSE c;
end prc_4;
执行
SQL> set serveroutput on;
SQL> exec dbms_output.enable(999999999999999999999);
PL/SQL procedure successfully completed
SQL> exec prc_4;
==1===杨2
==100===TestOne
==100===杨1
==100===TestOne
==200===Test2
PL/SQL procedure successfully completed
四、Hibernate调用oracle存储过程
private void prc_test()
{
getHibernateTemplate().execute(new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException, SQLException
{
CallableStatement cstmt = session.connection().prepareCall("{ call prc_3(?) }");
cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cstmt.execute();
ResultSet rs = (ResultSet) cstmt.getObject(1);
while (rs.next())
{
System.out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
}
return null;
}
}, true);
}
发表评论
-
关于java堆内存溢出的几种情况
2015-02-28 09:52 1129【情况一】: java ... -
图解TCP-IP协议(转)
2014-09-19 13:28 1051http://www.cricode.com/3568.h ... -
java 线程 整理(转)
2014-03-31 22:46 893java 线程 整理 1,简述 sync ... -
性能调优思考(转)
2013-11-20 19:42 1130前言 这篇文章非常有意思,写于2012年11 ... -
http协议详解(超详细)转
2013-11-06 23:23 1041http://blog.csdn.net/gueter/ar ... -
http协议详解(超详细)转
2013-11-06 23:18 969http://blog.csdn.net/gueter/ar ... -
java垃圾回收精华
2013-10-30 20:22 845本文系翻译: 原文地址:mechanical-sympath ... -
Eclipse快捷键 10个最有用的快捷键(转)
2013-10-28 23:11 861Eclipse快捷键 10个最有用的快捷键 ... -
深入理解Java Proxy机制(转)
2013-10-06 16:25 1049动态代理其实就是java.lang.reflect.P ... -
8 张图助你更好地理解 Java 编程(转)
2013-09-24 22:11 744所谓一图胜万言,本文中的这些图都是从ProgramCreek ... -
Java中堆与栈详解
2013-08-25 21:15 1019http://bbs.itcast.cn/thread-16 ... -
正确读取与设置缓存方法
2013-07-22 20:13 1299正确读取与设置缓存方法 博客分类: 并发编程 ... -
JAVA集合小结
2013-07-16 22:57 887JAVA集合小结 http://www.blogjava. ... -
四种java内部类总结
2013-07-15 19:11 7795第一 成员内部类 定义在另一个类的内部,而且与成员方法和属性 ... -
全国(大学)高等教育各学科视频教学全集
2013-05-30 20:01 2249为了方便已就 ... -
让你彻底明白JAVA中堆与栈的区别
2013-04-24 23:49 1025简单的说: Java把内存划分成两种:一种是栈内存,一种是堆 ... -
JDK中有关23个经典设计模式的示例
2013-04-23 21:55 761Structural(结构模式) Adapter: 把一个 ... -
JDK1.5/1.6/1.7之新特性总结
2013-03-19 21:59 1061开发过程中接触到了从jdk1.5---jdk1.7的使用,在 ... -
java中String和StringBuffer的区别(转载)
2013-03-14 14:27 917看到这个讲解的不错,所以转一下 在java中有3个类来负责 ... -
高效java异常处理机制
2013-01-30 19:41 1528Java开发人员做出的有 ...
相关推荐
### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL程序,可以接受输入参数,执行一系列操作,并返回结果或输出参数。它们可以提高应用程序的性能、安全性和复用性。在Oracle...
Java调用存储过程是数据库操作中的常见任务,特别是在复杂的业务逻辑和数据处理中。MyEclipse作为一款强大的Java集成开发环境,提供了方便的工具来支持这一功能。下面将详细介绍如何在MyEclipse中使用Java调用存储...
值得注意的是,上述代码中的文件名列表(如Project1.cfg、Unit1.dcu等)与Java调用存储过程无关,它们看起来像是Delphi或FreePascal项目的文件,这些文件通常用于描述项目配置、单元信息、表单布局等,而不是与Java...
### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...
总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...
Java直接调用存储过程实例
本篇文章将深入探讨如何使用Java与MySQL数据库进行交互,实现调用存储过程,并提供一个测试通过的实例。 首先,理解存储过程是数据库管理系统提供的一种预编译的SQL语句集合,它封装了特定的功能,可以提高执行效率...
" hyq "); CallableStatement cstmt = conn.prepareCall("{ call ...需要注意的是,在使用Java调用存储过程时,要确保驱动程序已正确导入,并且数据库连接信息是准确的,还要处理可能出现的异常,确保程序的健壮性。
在这个入门实例中,我们将重点探讨如何通过Java调用Oracle的存储过程来实现这些基本操作,并结合使用DOM4J解析XML配置文件来管理数据库连接。 首先,存储过程是Oracle数据库中预编译的SQL语句集合,它可以封装复杂...
#### 四、Java调用存储过程 下面通过两个Java类来演示如何调用上面创建的存储过程。 ##### 4.1 调用 `ADDDEPT` 存储过程 ```java public class TestProcedure { Connection conn = null; CallableStatement ...
一个完整的java调用Oracle存储过程的实例,含存储过程和代码注释
### JAVA调用存储过程的三种方法 在Java开发过程中,经常需要与数据库进行交互操作,其中存储过程作为一种封装好的数据库操作逻辑,在实际应用中非常常见。本文将详细介绍使用Java调用存储过程的三种方法:通过...
下面将详细介绍如何使用Java调用存储过程。 1. **创建CallableStatement对象** 首先,我们需要创建一个`CallableStatement`实例,这可以通过`Connection`对象的`prepareCall`方法完成。存储过程的调用格式通常以`...