有几个需要注意的地方:
1.程序类路径中需要添加nls_charset12.jar
2.如果用9i的数据库,不能用10g下的nls_charset12.jar,必须用对应的版本
3.下文中与数据库字段对应的ADDRESSTYPE必须大写[map.put("ADDRESSTYPE", Class.forName("AddressType"));]
4.查看数据库字符集
select * from nls_database_parameters
NLS_CHARACTERSET是数据库字符集,NLS_NCHAR_CHARACTERSET是国家字符集
ORACLE中有两大类字符型数据,VARCHAR2是按照数据库字符集来存储数据。而NVARCHAR2是按照国家字符集存储数据的。
5.参考资料
http://www.java2s.com/CN/Code/Java/Database-SQL-JDBC/InsertcustomtypetoOracle.htm
http://www.java2s.com/Code/JavaAPI/java.sql/ResultSetgetObjectStringcolumnLabel.htm
CREATE OR REPLACE TYPE addressType AS OBJECT(
country VARCHAR2(20),
province VARCHAR2(20),
city VARCHAR2(20),
street VARCHAR2(80),
zipcode VARCHAR2(10)
);
create table contactInfo (
name VARCHAR2(20),
telephone VARCHAR2(20),
mobile VARCHAR2(15),
fax VARCHAR2(20),
email VARCHAR2(25),
contactAddr addressType,
otherWords VARCHAR2(30)
);
insert into contactInfo(contactAddr) values(addressType('china', 'beijing', 'beijing', 'beijing', '10000'));
AddressType
public class AddressType implements SQLData {
public String country;
public String province;
public String city;
public String street;
public String zipcode;
private String sqlUdt;
public void writeSQL(SQLOutput stream) throws SQLException {
stream.writeString(country);
stream.writeString(province);
stream.writeString(city);
stream.writeString(street);
stream.writeString(zipcode);
}
public String getSQLTypeName() throws SQLException {
return sqlUdt;
}
public void readSQL(SQLInput stream, String typeName) throws SQLException {
sqlUdt = typeName;
country = stream.readString();
province = stream.readString();
city = stream.readString();
street = stream.readString();
zipcode = stream.readString();
}
}
测试代码:
//查看字符集是否支持,如果不支持,为CharacterSetUnknown,如果支持为CharacterSet12Byte
//int oracleId = CharacterSet.ZHS16GBK_CHARSET;
//CharacterSet dbCharset = CharacterSet.make(oracleId);
Class.forName("oracle.jdbc.driver.OracleDriver");
String urlName = "jdbc:oracle:thin:@127.0.0.1:1521:test";
con = DriverManager.getConnection(urlName, "username", "password");
stmt = con.createStatement();
//Oracle自定义类型与Java类型之间的映射
Map map = con.getTypeMap();
map.put("ADDRESSTYPE", Class.forName("AddressType"));
con.setTypeMap(map);
rs = stmt.executeQuery("select * from contactInfo");
while(rs.next()) {
System.out.println(rs.getString("telephone"));
AddressType add = (AddressType)rs.getObject("contactAddr");
if(add != null) {
System.out.println("country:" + add.country);
}
}
分享到:
相关推荐
强大的oracle编程。oracle数组操作基础教程
Oracle Create Type 是 Oracle 数据库中的一种强大工具,可以用于创建自定义类型,例如对象类型、数组类型、表类型等。在本文中,我们将详细介绍 Oracle Create Type 的概念、语法和应用。 1. Oracle Create Type ...
Oracle 数据库支持多种不同的数据类型,甚至允许用户自定义类型,但最常用的还是其基本数据类型。 Oracle 数据类型体系可以分为以下几类: 1. 字符型:包括 CHAR、NCHAR、VARCHAR2、NVARCHAR2 等。 CHAR 型数据...
2. 将日期字符串转换为日期类型:Informix 中的 dateto_char 函数可以将日期字符串转换为日期类型,而 Oracle 中的 to_date 函数可以实现相同的功能。 3. 获取指定日期的月份:Informix 中的 month 函数可以获取...
3.1 Oracle常用数据类型 3.2创建表 3.3表的约束 4. 数据操作语言(DML) 4.1数据插入 4.2更新数据 4.3删除数据 4.4 TRUNCATE(DDL命令) 5. 操作符 5.1算术运算 5.2关系运算和逻辑运算 5.3字符串连接操作...
然后,插入 Oracle 10g 安装光盘,启动安装程序,选择安装语言和安装类型,选择典型安装或自定义安装,选择安装目录等。安装程序将自动安装 Oracle 10g 数据库软件。 2. 配置数据库参数 在安装完成后,需要配置...
38.优化调整Oracle 8i数据库(从操作系统) 39.在Internet上运作公司是一项艰苦的任务--关键任务 40.在oracle中限制返回结果集的大小 41.在远端如何建立standby数据库 42.怎样分析你的SQL语句的效率 43....
实验36:在块中自定义数据类型,使用复合变量 73 实验37:在块中使用自定义游标 76 实验38:在块中处理错误exception 78 编写程序 80 实验39:触发器 80 实验40:编写函数 82 实验41:编写存储过程 83 实验42:编写...
由于 Oracle 数据库可以存储大量的数据,但是数据文件大小受操作系统的限制,而过大的数据文件对数据的存取性能影响非常大。因此,Oracle 引入了表空间的概念,以解决存储空间的管理问题。 Oracle 表空间是指一个...
Oracle9i数据库安装类型包括:企业版、标准版、个人版、自定义。 如果想很好地使用Oracle9i,要求读者使用的硬件平台为PIII 800MHz或者相似性能,256M内存(推荐512MB),剩余磁盘空间为3GB(推荐5GB以上),推荐...
11 管理表 目标 11-2 储存用户数据 11-3 Oracle 数据类型 11-5 ROWID 格式 11-8 行的结构 11-10 创建一张表 11-11 创建临时表 11-13 创建表:指南 11-14 修改储存参数 11-15 手工分配片 11-16 重构非分区表 11-17 ...
Oracle 的Streams提供了信息共享的一种方式,区别于其它数据共享的方式,Streams甚至允许不同类型的数据库之间传递数据,实现这点的根本在于 Streams的复制流程,通过捕获,传播,应用三个步骤,将指定的信息传输...
PL/SQL 记录类型类似于 C 语言中的结构,是一种复合类型,是用户自定义的。记录提供了一种处理独立的但又作为一个整体单元相关的变量的机制。 例如: ```sql DECLARE v_StudentID NUMBER(5); v_FirstName VARCHAR...
《Oracle11g宝典》以Oracle提供的示例数据库为背景,从基本原理、理论提高、实际操作、经验策略、应用开发等方面,结合命令行方式、开发工具的使用、管理工具的使用、Oracle与Windows之间的关系等知识点,按照学习...
Oracle建议我们自定义自己的角色,使我们更加灵活方便去管理用户 创建角色 SQL> create role admin; 授权给角色 SQL> grant connect,resource to admin; 撤销角色的权限 SQL> revoke connect from admin; ...
Oracle监听器维护管理v1.1 1 一、监听器工作原理 3 二、监听器Lisener功能 4 1、 监听客户端请求 4 2、 为客户端请求分配Server Process 4 3、 注册实例服务 4 4、 错误转移failover 4 5、 负载均衡衡量 4 三、监听...
针对某一应用(至少涉及到复合属性、多值属性,属性数据类型可能是自定义类型),做如下工作: (1)设计概念数据库(EER) (2)用关系模型设计逻辑结构 (3)设计对象类型、方法以及建立对象表,包括对象引用类型...
§4.1.3 游标修改和删除操作 13 第五章 异常错误处理 13 §5.1 异常处理概念 13 §5.1.1 预定义的异常处理 13 §5.1.2 非预定义的异常处理 13 §5.1.3 用户自定义的异常处理 13 §5.1.4 用户定义的异常处理 13 §5.2...
ASP.NET自定义表单源码带完整操作手册 开发语言 : C# 数据库 : SQL2008 开发工具 : VS2008 源码类型 : WebForm 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 在通用型办公系统中,固定的业务...
- 支持自定义类型的序列化和反序列化。 - **资源**: - 官方网站:[SOCI](http://soci.sourceforge.net/) - GitHub:[SOCI on GitHub](https://github.com/SOCI/soci) ### 2. **sqlpp11** sqlpp11 是一个现代的...