- 浏览: 615739 次
- 性别:
- 来自: 杭州,长沙
文章分类
- 全部博客 (279)
- Java (30)
- Jsp、Servlet (18)
- Web前端 (56)
- Oracle (31)
- SqlServer (1)
- Jetty (3)
- Tomcat (6)
- Weblogic (11)
- Websphere (2)
- Struts2 (13)
- Spring (5)
- Ibatis (8)
- Hibernate (3)
- Webservice (1)
- C/C++ (2)
- Linux (13)
- Android (1)
- 正则表达式 (3)
- 网络组建 (3)
- 软件工程 (11)
- IDE使用技巧 (20)
- Windows操作技巧 (18)
- 养生之道 (1)
- 杂七杂八 (15)
- 心理保健 (1)
最新评论
-
50854319:
elements[i] = tagArr[i]; 这个需要修改 ...
document.getElementsByName在IE下的bug解决 -
mengsina:
通过楼主的介绍,能够启动client了。但是又遇到了cisco ...
(转)Cisco Systems, Inc. VPN使用过程中常见问题解决方案 -
zzz_robinson:
谢谢,关闭-启动-启动。这个循序对的,否则每次都提示服务没打开 ...
(转)Cisco Systems, Inc. VPN使用过程中常见问题解决方案 -
wuchunjiesp:
总算解决了,THANK楼主,空值问题是TYPE里面参数类型定义 ...
(原创)Ibatis2调用数据库存储过程的相关示例 -
wuchunjiesp:
存储里面是这样的
FOR I IN 1..P_GOODSDI ...
(原创)Ibatis2调用数据库存储过程的相关示例
一:java代码:
1,Bean
public class MObj {
private Long mId;
private String mName;
private Double price;
public void setMId(Long mId) {
this.mId = mId;
}
public void setMName(String mName) {
this.mName = mName;
}
public void setPrice(Double price) {
this.price = price;
}
public Long getMId() {
return (this.mId);
}
public String getMName() {
return (this.mName);
}
public Double getPrice() {
return (this.price);
}
}
2,java测试代码:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.Datum;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
/**
* @author Leewinq
*
*/
public class TestProcedureList {
private static ARRAY getArray(Connection con, String OracleObj,
String Oraclelist, List listData) throws Exception {
ARRAY array = null;
if (listData != null && listData.size() > 0) {
ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,con);
StructDescriptor structdesc = new StructDescriptor(OracleObj, con);
STRUCT[] structs = new STRUCT[listData.size()];
for (int i = 0; i < listData.size(); i++) {
/*
* result = new Object[3]; // 数组大小应和你定义的数据库对象(AOBJECT)的属性的个数
* result[0] = ((MObj) listData.get(i)).getMId(); //
* 将list中元素的数据传入result数组 result[1] = ((MObj)
* listData.get(i)).getMName(); result[2] = ((MObj)
* listData.get(i)).getPrice();
*/
Object[] result = { ((MObj) listData.get(i)).getMId(),
((MObj) listData.get(i)).getMName(),
((MObj) listData.get(i)).getPrice() };
structs[i] = new STRUCT(structdesc, con, result);
}
array = new ARRAY(desc, con, structs);
}
return array;
}
/**
* @return
*/
private List makeData() {
List list = new ArrayList<MObj>();
MObj m1 = new MObj();
m1.setMId(Long.valueOf(110000000000000061l));
m1.setMName("订单物资一");
m1.setPrice(1888.80);
MObj m2 = new MObj();
m2.setMId(Long.valueOf(110000000000000052l));
m2.setMName("订单物资二");
m2.setPrice(6666.80);
list.add(m1);
list.add(m2);
return list;
}
private Connection getConn() throws Exception {
Class c = Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "xxxx", "xxx");
return conn;
}
public static void main(String[] args) {
TestProcedureList procedureList = new TestProcedureList();
List listData = procedureList.makeData();
Connection conn = null;
try {
conn = procedureList.getConn();
if (conn != null && !conn.isClosed()) {
ARRAY array_ = procedureList.getArray(conn, "AMATERIAL",
"MLIST", listData);
CallableStatement stmt = conn
.prepareCall("{call test_varray(?,?)}");
stmt.setArray(1, array_);
stmt.registerOutParameter(2, Types.VARCHAR);
stmt.execute();
String mName = stmt.getString(2);
System.out.println("从oracle存储过程返回的结果:____________" + mName);
conn.commit();
stmt.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null && !conn.isClosed()) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
二,Oracle代码:
create table T_list_test
(
list_test_id number(18),
list_test_title varchar(200),
list_test_price number(18,6)
)
CREATE TYPE AMaterial AS OBJECT
(
mid NUMBER(18),
mname NVARCHAR2(200), ----------切记,java对象中的String型,在创建oracle对象时,必须使用 NVARCHAR2,否则拿不到值
mprice NUMBER(18,6)
)
CREATE TYPE mList AS TABLE OF AMaterial;
CREATE OR REPLACE procedure test_varray(list_ IN mList,omName OUT VARCHAR2)
AS
BEGIN
FOR i IN 1..list_.count() LOOP
dbms_output.put_line('第'||i||'个对象的ID为:__________'||list_(i).mid);
dbms_output.put_line('第'||i||'个对象的name为:__________'||list_(i).mname);
dbms_output.put_line('第'||i||'个对象的price为:__________'||list_(i).mprice);
INSERT INTO T_list_test(list_test_id,list_test_title,list_test_price) VALUES (list_(i).mid,list_(i).mname,list_(i).mprice);
END LOOP;
omName := '操作成功!';
END;
SELECT * FROM T_list_test
以上代码,本人测试可以直接运行,请修改对应的数据库连接字符串
发表评论
-
Oracle分页查询语句
2010-04-27 17:42 0Oracle的分页查询语句基 ... -
sqldeveloper2.1启动报无法创建jvm实例错误的解决方法
2010-02-25 13:48 1675SQL Developer 启动时报错: Un ... -
提供大家一个pl/sql developer 8 完全破解补丁(不是loader.exe)
2009-11-10 18:01 9916本人亲自下载测试,完全可用,完美破解,支持目前官方提供的最新版 ... -
Oracle:查找表的主键,外键,唯一性约束,索引
2009-11-04 14:26 30171、查找表的所有索引(包括索引名,类型,构成列): sele ... -
如何启动或关闭数据库的归档(ARCHIVELOG)模式
2009-11-03 13:52 1382Oracle数据库可以运行在2种模式下:归档模式(archiv ... -
oracle子递归查询语句的几个有用的属性
2009-10-20 12:59 19061.如何正确排序: siblings 2.展现 ... -
oracle创建表空间,创建用户
2009-07-22 17:28 1290//创建临时表空间 create temporary tabl ... -
Oracle动态游标入门
2009-07-13 10:14 2611一、最简单的一个动态游标:CREATE OR REPLACE ... -
用java调用oracle存储过程
2009-07-10 11:11 806一:无返回值的存储过程 存储过程为: CREATE OR ... -
oracle job详解
2009-07-07 16:17 2127一、设置初始化参数 job ... -
存储过程中使用dblink,碰到dblink死锁解决方案
2009-07-06 18:03 2527CREATE OR REPLACE PROCEDURE syn ... -
Oracle预定义的21个系统异常类型!
2009-07-06 17:07 1152命名的系统异常 产生原因 ... -
oracle游标使用
2009-07-03 19:07 1390游标: 用来查询数据库,获取记录集合(结果集)的指针,可 ... -
oracle存储过程,游标及循环应用实例
2009-07-03 18:13 7621最近在项目中做了一个关于系统与系统之间数据同步的业务,之前使用 ... -
如何让你的SQL运行得更快
2009-07-01 16:40 771人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否 ... -
用一个实例讲解Oracle的自定义聚集函数
2009-07-01 16:29 1074Oracle数据库的定制功能十分强大。Oracle不但允许用 ... -
对一大表建立索引时应当注意的事项及提高性能
2009-07-01 16:22 1155一、注意事项: 首先,应当考虑表空间和磁盘空间是否足够。我们 ... -
Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)
2009-07-01 11:42 910SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十 ... -
利用oracle快照dblink解决数据库表同步问题
2009-06-30 19:42 1794--名词说明:源——被 ... -
oracle db_link 和触发器实现不同数据库表的同步
2009-06-30 19:35 2178---创建dblink,dblink_test名称,(被同步数 ...
相关推荐
我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用这些存储过程。 Oracle 存储过程 首先,我们编写了两个 Oracle 存储过程:`P_EMP_SELECT` 和 `P_EMP_ADD`。 `P_EMP_SELECT` ...
### JAVA调用ORACLE存储过程通用类 #### 概述 在Java开发中,经常会遇到需要与数据库交互的情况,特别是当涉及到复杂的业务逻辑时,利用数据库的存储过程可以有效地提高程序性能并简化代码结构。本篇文章将详细...
本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...
Oracle存储过程和触发器是数据库管理系统中的重要组成部分,它们在数据处理和业务逻辑实现中扮演着关键角色。本文将深入探讨这两个概念以及它们在实际应用中的使用。 **Oracle存储过程** Oracle存储过程是一组预...
在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...
通过上述示例可以看出,在Java Web应用中利用Oracle存储过程可以高效地完成数据的增删查操作。这种方式不仅提高了代码的复用性和可维护性,还能够充分利用数据库的能力,减少网络传输数据量,提升整体性能。在实际...
提供的`javaSrc165.zip`文件很可能包含了一个示例项目,展示了如何在Java中将List传递给存储过程的具体实现。解压后,你可能找到一个或多个Java类,它们展示了如何创建`CallableStatement`,设置参数,并执行存储...
对于批量数据插入,示例代码还展示了如何使用列表(`List, String>>`)来批量处理数据,并将其转换为存储过程所需的二维数组格式。 ```java String[][] in_array = new String[count][colsName.length]; for (int i...
### Ibatis调用Oracle存储过程返回自定义类型 在企业级应用开发中,尤其是在金融、保险等业务场景中,往往需要处理复杂的数据结构与逻辑。本文将深入探讨如何使用Ibatis框架来调用Oracle数据库中的存储过程,并实现...
### Oracle存储过程详解 #### 一、存储过程基础概念 **定义:** 存储过程(Stored Procedure)是指在数据库中预编译并存储的一系列SQL语句集合,它们被设计用于执行特定的任务。当用户需要执行这些任务时,只需...
然而,存储过程的功能远不止于此,它还能够实现更为复杂的数据操作逻辑,并且可以与其他编程语言如Java结合使用。 #### 二、创建存储过程示例 根据提供的部分内容,我们可以看到一个简单的存储过程`proc_select`...
总结来说,面向对象的Java JDBC分页查询涉及到创建Page类来存储分页信息,构造Oracle兼容的SQL语句,以及使用PreparedStatement执行查询。在实际开发中,我们还需要关注性能优化、异常处理和代码的可维护性,确保...
为了使Oracle能够调用基于Java的WebService,还需要安装JDK并配置Oracle对Java的支持: 1. **下载并安装JDK**:确保Oracle运行环境中已安装Java环境。 2. **加载Java支持**:使用`loadjava`工具加载必要的JAR文件到...
通过学习和实践这些技巧,开发者可以充分利用iBatis的优势,高效地在Java应用中调用Oracle的函数和存储过程,提高代码的可维护性和可扩展性。同时,了解数据库底层的工作原理也有助于优化性能,解决可能出现的问题。...
#### 二、Java调用Oracle存储过程 在Java端,可以利用Spring框架整合jdbcTemplate来调用Oracle存储过程。这里主要涉及以下步骤: 1. **配置数据源**:在Spring的配置文件中定义数据源。 2. **定义DAO层**:在DAO层...
根据提供的文件信息,我们可以...通过以上介绍可以看出,存储过程、触发器和远程数据库连接都是Oracle数据库中非常重要的特性,它们可以帮助开发者更高效地管理数据、实现复杂的数据处理逻辑以及跨数据库访问等功能。
5. **集合框架**:Java集合框架包括List、Set、Map接口和它们的实现类,如ArrayList、LinkedList、HashSet、HashMap等,这些示例代码将帮助你理解如何在实际项目中存储和操作数据。 6. **多线程**:Java内置对多...
#### 一、Oracle存储过程基础知识 存储过程是一种预先编写并存储于数据库中的SQL与编程语言混合的脚本。这些脚本可以包括复杂的逻辑,例如条件判断、循环等,使得它们能够在数据库内部执行更复杂的任务,如批量更新...
在本文中,我们将深入探讨如何使用Spring Boot与Java Persistence API (JPA) 实现批量存储操作。Spring Boot简化了设置和配置,而JPA作为Java的ORM(对象关系映射)框架,允许开发者以面向对象的方式操作数据库。...