- 浏览: 1314646 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (351)
- Java General (37)
- .net General (2)
- Linux Toy (55)
- Oracle (81)
- Mysql (11)
- Programer Career (12)
- Oh, my living ! (2)
- Shell Script (8)
- Web Service (0)
- Linux Server (22)
- Php/Python/Perl (3P) (2)
- Javascript General (5)
- Saleforce Apex Dev (2)
- Web General (5)
- Xen & VM tech. (17)
- PSP (13)
- OpenSolaris (34)
- php (1)
- RAI/flex/action script (16)
- asterisk/CTI (7)
- 交互设计 (6)
- English (3)
- Lucene (1)
最新评论
-
GuolinLee:
markmark
JVM调优总结 -Xms -Xmx -Xmn -Xss -
di1984HIT:
写的太好啊。
JVM调优总结 -Xms -Xmx -Xmn -Xss -
javajdbc:
javajdbc 写道
JVM调优总结 -Xms -Xmx -Xmn -Xss -
javajdbc:
...
JVM调优总结 -Xms -Xmx -Xmn -Xss -
alvin198761:
非常感谢,国外的被封杀了,你这里还有一份
How to Convert An Image-Based Guest To An LVM-Based Guest
为了减少连接Oracle数据库的数量,需要将多条数据作为变量一次传入Oracle的存储过程中。方法如下:
步骤一:定义对象类型。
CREATE TYPE department_type AS OBJECT (
DNO NUMBER (10),
NAME VARCHAR2 (50),
LOCATION VARCHAR2 (50)
);
步骤二:定义一个对象类型的数组对象。
CREATE TYPE dept_array AS TABLE OF department_type;
步骤三:定义存储过程来插入数据。
CREATE OR REPLACE PACKAGE objecttype AS
PROCEDURE insert_object (d dept_array);
END objecttype;
CREATE OR REPLACE PACKAGE BODY objecttype
AS
PROCEDURE insert_object (d dept_array)
AS
BEGIN
FOR i IN d.FIRST..d.LAST
LOOP
INSERT INTO department_teststruct
VALUES (d(i).dno,d(i).name,d(i).location);
END LOOP;
END insert_object;
END objecttype;
步骤四(可选步骤,即可以不做):定义一个Java class来映射对象中类型。
步骤五:定义Java方法来调用存储过程。
import java.sql.Connection;
import java.sql.DriverManager;
import oracle.jdbc.OracleCallableStatement;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
public class TestStruct ...{
public static void main(String[] args)
...{
sendStruct();
}
public static void sendStruct()
...{
Connection dbConn = null;
try...{
Object[] so1 = ...{"10","Accounts","LHR"};
Object[] so2 = ...{"20","HR","ISB"};
OracleCallableStatement callStatement = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
dbConn = DriverManager.getConnection("jdbc:oracle:thin:@ServerName:Port:ORa", "UserName", "Password");
StructDescriptor st = new StructDescriptor("DEPARTMENT_TYPE",dbConn);
STRUCT s1 = new STRUCT(st,dbConn,so1);
STRUCT s2 = new STRUCT(st,dbConn,so2);
STRUCT[] deptArray = ...{s1,s2};
ArrayDescriptor arrayDept = ArrayDescriptor.createDescriptor("DEPT_ARRAY", dbConn);
ARRAY deptArrayObject = new ARRAY(arrayDept, dbConn, deptArray);
callStatement = (OracleCallableStatement)dbConn.prepareCall("{call insert_object(?)}");
((OracleCallableStatement)callStatement).setArray(1, deptArrayObject);
callStatement.executeUpdate();
dbConn.commit();
callStatement.close();
}
catch(Exception e)...{
System.out.println(e.toString());
}
}
}
jdbc:oracle:thin: --Oracle数据库驱动标识
ServerName: --Oracle数据库所有机器名或IP地址
1521: --数据库所使用的端口号
ORa --Oracle服务名
注意事项:
1. 首先一个操作是手动连接Oracle建立对象,接下来的操作是通过JAVA程序建立数据库连接来使用对象。如果两个操作使用同一个用户就没有问题,如果是不同的用户那么要确保第二个操作(即通过Java程序)的用户有权限来操作第一个用户建立的对象。第一个用户为它添加权限的方法是:在每个对象中大家可以找到权限一项,找到对应用户添加执行权限即可。而在程序中就需要做一些修改。存储过程同理。
StructDescriptor st = new StructDescriptor("第一个UserName.DEPARTMENT_TYPE",dbConn);
ArrayDescriptor arrayDept = ArrayDescriptor.createDescriptor("第一个UserName.DEPT_ARRAY", dbConn);
callStatement = (OracleCallableStatement)dbConn.prepareCall("{call 第一个UserName.insert_object(?)}");
结果是Java中虽然只是一次执行连接数据库,但是却一次插入两条数据。希望能够给寻找类似解决方案的兄弟姐妹提供一点帮助。有什么建议或者意见尽管留言,谢谢。
参考资料:
1. 大家可以在下面的链接中找到javadoc文件来进行下载,这是一个非常有用的说明文档,这次我主要用到了DriverManager.getConnection的定义方法。
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc101020.html
步骤一:定义对象类型。
CREATE TYPE department_type AS OBJECT (
DNO NUMBER (10),
NAME VARCHAR2 (50),
LOCATION VARCHAR2 (50)
);
步骤二:定义一个对象类型的数组对象。
CREATE TYPE dept_array AS TABLE OF department_type;
步骤三:定义存储过程来插入数据。
CREATE OR REPLACE PACKAGE objecttype AS
PROCEDURE insert_object (d dept_array);
END objecttype;
CREATE OR REPLACE PACKAGE BODY objecttype
AS
PROCEDURE insert_object (d dept_array)
AS
BEGIN
FOR i IN d.FIRST..d.LAST
LOOP
INSERT INTO department_teststruct
VALUES (d(i).dno,d(i).name,d(i).location);
END LOOP;
END insert_object;
END objecttype;
步骤四(可选步骤,即可以不做):定义一个Java class来映射对象中类型。
步骤五:定义Java方法来调用存储过程。
import java.sql.Connection;
import java.sql.DriverManager;
import oracle.jdbc.OracleCallableStatement;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
public class TestStruct ...{
public static void main(String[] args)
...{
sendStruct();
}
public static void sendStruct()
...{
Connection dbConn = null;
try...{
Object[] so1 = ...{"10","Accounts","LHR"};
Object[] so2 = ...{"20","HR","ISB"};
OracleCallableStatement callStatement = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
dbConn = DriverManager.getConnection("jdbc:oracle:thin:@ServerName:Port:ORa", "UserName", "Password");
StructDescriptor st = new StructDescriptor("DEPARTMENT_TYPE",dbConn);
STRUCT s1 = new STRUCT(st,dbConn,so1);
STRUCT s2 = new STRUCT(st,dbConn,so2);
STRUCT[] deptArray = ...{s1,s2};
ArrayDescriptor arrayDept = ArrayDescriptor.createDescriptor("DEPT_ARRAY", dbConn);
ARRAY deptArrayObject = new ARRAY(arrayDept, dbConn, deptArray);
callStatement = (OracleCallableStatement)dbConn.prepareCall("{call insert_object(?)}");
((OracleCallableStatement)callStatement).setArray(1, deptArrayObject);
callStatement.executeUpdate();
dbConn.commit();
callStatement.close();
}
catch(Exception e)...{
System.out.println(e.toString());
}
}
}
jdbc:oracle:thin: --Oracle数据库驱动标识
ServerName: --Oracle数据库所有机器名或IP地址
1521: --数据库所使用的端口号
ORa --Oracle服务名
注意事项:
1. 首先一个操作是手动连接Oracle建立对象,接下来的操作是通过JAVA程序建立数据库连接来使用对象。如果两个操作使用同一个用户就没有问题,如果是不同的用户那么要确保第二个操作(即通过Java程序)的用户有权限来操作第一个用户建立的对象。第一个用户为它添加权限的方法是:在每个对象中大家可以找到权限一项,找到对应用户添加执行权限即可。而在程序中就需要做一些修改。存储过程同理。
StructDescriptor st = new StructDescriptor("第一个UserName.DEPARTMENT_TYPE",dbConn);
ArrayDescriptor arrayDept = ArrayDescriptor.createDescriptor("第一个UserName.DEPT_ARRAY", dbConn);
callStatement = (OracleCallableStatement)dbConn.prepareCall("{call 第一个UserName.insert_object(?)}");
结果是Java中虽然只是一次执行连接数据库,但是却一次插入两条数据。希望能够给寻找类似解决方案的兄弟姐妹提供一点帮助。有什么建议或者意见尽管留言,谢谢。
参考资料:
1. 大家可以在下面的链接中找到javadoc文件来进行下载,这是一个非常有用的说明文档,这次我主要用到了DriverManager.getConnection的定义方法。
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc101020.html
评论
1 楼
sfgeeq
2009-01-15
我运行的时候发现NUMBER型 的可以插入,VARCHAR2类型的就不行!
我改了一下!
CREATE TYPE department_type AS OBJECT (
DNO NUMBER (10),
NAME VARCHAR2 (50),
LOCATION VARCHAR2 (50)
);
改成:
CREATE TYPE department_type AS OBJECT (
DNO NUMBER (10),
NAME nVARCHAR2 (50),
LOCATION nVARCHAR2 (50)
);
然后就可以了!
不过我不知道为什么这么改就没问题!
我改了一下!
CREATE TYPE department_type AS OBJECT (
DNO NUMBER (10),
NAME VARCHAR2 (50),
LOCATION VARCHAR2 (50)
);
改成:
CREATE TYPE department_type AS OBJECT (
DNO NUMBER (10),
NAME nVARCHAR2 (50),
LOCATION nVARCHAR2 (50)
);
然后就可以了!
不过我不知道为什么这么改就没问题!
发表评论
-
使用Spring 的封装的MailSender
2010-11-29 22:24 6718使用Spring 的封装的Ma ... -
有时候,SVN 上代码太多,而我们只想下载自己负责的那个部分进行修改,这时可以这样
2010-09-04 09:06 1270svn checkout <url_of_big_dir ... -
tomcat session replication on linux server.
2010-07-26 10:49 1194Specially, to turn on multicast ... -
Session lost when app. is redeployed (Solved)
2010-07-07 16:02 1262There is a workaround to this p ... -
jvm 5.0 GC 回收机制
2009-10-16 11:55 1766http://java.sun.com/docs/hotspo ... -
How to Create a Custom Annotations?
2009-10-08 11:32 1224There are a lot of documentatio ... -
JAXB 深入学习<1>
2009-08-04 22:22 2348说白了就是一个api将 xml+schema->ja ... -
simple json lib for java
2009-08-04 21:57 3215有时候为了需要将一个对象或数组转成json string 给前 ... -
在servlet 上输出图片
2008-07-30 21:38 4282public void doGet(HttpServletRe ... -
用java 对 oracle 中的 image 存取
2008-07-30 21:35 1843package data; import java.io. ... -
有关 java 的 tnameserv的link
2008-07-15 22:39 2294http://java.sun.com/j2se/1.4.2/ ... -
SOAP and JDOM
2008-06-18 21:54 2143看完上一篇 blog: Web 服务搜 ... -
Java Reflection API 运用示例
2008-05-05 15:51 2378本文节选 ... -
将系统移植到Spring
2008-04-29 11:06 1482Spring已经是一个在Apache 2.0许可下发布的基础构 ... -
动态代理一例
2008-04-28 15:33 1204在之前的一篇关于Dec ... -
使用JAVA中的动态代理实现数据库连接池
2008-04-28 13:48 1471作者通过使用JAVA中的动 ... -
Have you known enough about DBCP?
2008-04-23 12:08 2251Have you known enough about DBC ... -
AX-RPC Evolves into Simpler, More Powerful JAX-WS
2008-03-23 15:40 3549s of version 2.0, JAX-RPC has b ... -
更改 Netbeans 界面的字体大小
2008-03-22 07:29 4685学习或者使用 Netbeans 的时候, 有时候觉得界面字体很 ... -
JSF+Spring+Hibernate的实例讲解
2008-03-20 16:41 2445我一直认为jsf必定会成为MS的 Net ...
相关推荐
在这个场景中,我们将从Java应用程序收集一系列用户数据,将其转换为Oracle数组,然后调用一个预定义的存储过程进行批量更新操作。 #### 五、注意事项与优化建议 - **类型匹配**:确保Java对象属性与数据库对象...
在 Oracle 数据库与 Java 应用程序交互时,理解 SQL 数据类型和它们对应的 JDBC 类型以及 Oracle 扩展的 Java 类型是至关重要的。这里我们将深入探讨这些概念,并提供一个全面的指南。 首先,JDBC(Java Database ...
在Java编程中,与Oracle数据库交互是常见的任务之一,而调用Oracle存储过程可以实现复杂的业务逻辑。本文将深入探讨如何在Java中调用Oracle存储过程,并输出自定义对象或二维表,以此提升数据处理效率。 首先,我们...
如果你正在寻找一种在Java中处理结构体数据的解决方案,JavaStruct是一个值得考虑的工具,尽管现在可能已经有一些更新的、更现代的库可以替代它,但其历史价值和兼容性仍然使其在某些场景下具有一定的实用性。
Oracle存储过程是一种在Oracle数据库中存储的一段可执行的SQL代码或PL/SQL代码,它可以帮助开发人员实现复杂的业务逻辑处理,提高应用程序的性能,并简化数据库管理。 #### 二、Oracle存储过程的基本结构 存储过程...
总的来说,JavaStruct是一个实用的工具,它简化了Java应用程序在网络通信和数据交换中的工作,特别是在与遵循C语言结构体格式的系统交互时。通过使用注解和明确的字段顺序,开发者可以确保数据在各种平台上的序列化...
JavaStruct.zip是一个包含JavaStruct.jar和源码的压缩包,主要面向学习或使用JavaStruct框架的人群。这个框架可能是为了简化Java开发中的某些结构化任务,例如数据结构、算法实现或者设计模式等。源码的提供使得用户...
Oracle存储过程是一种预编译的SQL脚本集合,它可以包含复杂的控制流逻辑、数据处理操作等,并且能够被其他应用程序或用户通过简单的调用来执行。使用存储过程可以提高数据库应用的性能和安全性,同时简化应用程序...
存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。 定义总是很抽象。存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server)。如果我们通过创建存储...
Oracle存储过程是一种预编译的SQL脚本集合,它可以包含复杂的逻辑控制结构,如条件语句、循环等,并且可以在数据库内部执行,从而提高性能并简化应用程序的开发工作。存储过程支持多种变量类型,包括数字、字符串和...
本项目以"员工请假模块java +struct+oracle10g"为核心,构建了一个高效、稳定的请假管理平台。下面我们将深入探讨这一系统的各个组成部分及其技术实现。 首先,Java作为后端开发的主要语言,以其跨平台、面向对象的...
JavaStruct-0.2.jar.zip 是一个包含JavaStruct-0.2.jar的压缩文件,它标志着这个是一个针对Java平台的软件组件或者库的稳定版本。JavaStruct这个名字暗示它可能是一个框架或者工具集,专注于结构化数据处理或者软件...
存储过程是数据库中预编译的一组SQL语句及过程化结构的集合体,它可以在数据库服务器上执行,以此来提高性能并减少网络流量。下面将详细介绍文档中提到的各种元素。 ### 1. 创建存储过程 创建存储过程的基本语法...
BEGIN END 存储过程名字 2.SELECT INTO STATEMENT 将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条 记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND) 例子: BEGIN SELECT col1,col...
Oracle 存储过程是一种可以在数据库中存储和执行的一或多个 SQL 命令的对象。用户可以通过指定存储过程的名字并给出参数来执行它。 优点: 1. 大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程...
【Java框架之Struct】,即Struts框架,是Java Web开发中的一款著名MVC框架,由Apache软件基金会开发。Struts主要关注于表示层(UI Layer),提供了一种组织和控制应用程序逻辑的方式,使得开发者能够更有效地构建...
在Java开发中,MapStruct是一个非常实用的代码生成库,它简化了对象之间的映射过程,尤其是当对象之间存在复杂的转换逻辑时。本示例主要介绍如何在MapStruct中自定义类转换,以便处理特定的转换需求。我们将通过分析...