`
up2pu
  • 浏览: 223569 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

操作Oracle自定义类型

    博客分类:
  • DB
阅读更多
有几个需要注意的地方:
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 日期处理函数是数据库管理系统中非常重要的一部分,最近看到有人在做 T-SQL 与 PL/SQL 的转化,问了些有关时间函数的处理。在 PL/SQL 中,Oracle 提供了其他的方法来处理日期函数,...

    Oracle自定义聚合函数-分析函数

    Oracle 自定义聚合函数-分析函数 Oracle 自定义聚合函数是一种强大且灵活的功能,允许用户根据自己的需求创建自定义的聚合函数。聚合函数是一种特殊的函数,它可以对一组数据进行处理和计算,并返回一个结果。 ...

    oracle自定义函数总结

    本文将详细介绍Oracle自定义函数的定义、使用方法以及一些高级特性。 #### 二、基本语法与定义 1. **定义函数的基本语法**: ```sql CREATE [OR REPLACE] FUNCTION function_name (参数列表) RETURN 返回类型 ...

    oracle自定义异常

    ### Oracle自定义异常知识点 #### 一、Oracle异常处理机制简介 在Oracle PL/SQL编程中,异常处理是一项非常重要的功能。它可以帮助开发者捕获并处理程序运行时可能发生的错误情况,确保应用程序能够稳定可靠地运行...

    c#调用Oracle UDT自定义结构数组类型源代码

    以上就是关于“C#调用Oracle UDT自定义结构数组类型”的详细说明,通过这样的方式,开发者可以在C#中充分利用Oracle数据库的高级特性,实现更复杂的数据操作。在实际项目中,根据具体的业务需求,可能还需要处理更多...

    Oracle Exception汇总(自定义Oracle异常)

    Oracle数据库在处理错误和异常时有一套完整的机制,这些异常主要分为预定义异常和自定义异常。预定义异常是Oracle系统已经内置的一些常见错误,它们都有对应的错误代码(ORA-xxx)。下面,我们将深入探讨一些常见的...

    Oracle自定义聚集函数使用

    本文将深入探讨Oracle自定义聚集函数的实现与应用,包括其四个主要组成部分:`ODCIAggregateInitialize`、`ODCIAggregateIterate`、`ODCIAggregateMerge`以及`ODCIAggregateTerminate`。 ### ...

    Oracle表类型表变量使用

    本文将深入探讨Oracle表类型表变量的使用,以及如何通过提供的SQL脚本进行实践操作。 首先,让我们了解什么是Oracle表类型。表类型是一种自定义的数据类型,它可以像普通数据库表一样存储数据,但存在于PL/SQL环境...

    Oracle统一社会信用代码自定义效验函数

    在IT行业中,数据库管理系统(DBMS)如...总结来说,这个Oracle自定义函数是针对统一社会信用代码的效验工具,遵循国家的效验规则,确保在数据库中存储的USCC信息的准确无误,这对于在中国进行合规操作的企业至关重要。

    C# 传入自定义列表List 到Oracle存储过程

    在C#中,我们需要创建一个表示Oracle自定义类型的类,然后提供一个方法将List转换为OracleDbType对应的数组。 ```csharp public class MyType { public int Id { get; set; } public string Name { get; set;...

    Oracle Create Type 详解

    Oracle Create Type 是 Oracle 数据库中的一种强大工具,可以用于创建自定义类型,例如对象类型、数组类型、表类型等。在本文中,我们将详细介绍 Oracle Create Type 的概念、语法和应用。 1. Oracle Create Type ...

    hibernate映射Oracle中LONG类型

    在 Hibernate 框架中,使用自定义类型映射 Oracle 中的 LONG 类型字段是一种常见的解决方案。通过实现 UserType 接口,我们可以定制 LONG 类型字段的读写操作。在本例中,我们定义了一个名为 CustomLong 的类,该类...

    Oracle 10g 操作手册 Oracle数据类型精解

    6. **对象型**:Oracle支持自定义数据类型,如CREATE TYPE语句定义的对象类型。 7. **集合型**:VARRAY和NESTED TABLE是两种集合类型,用于存储数组或表格形式的数据。 二、Oracle 10g数据库管理员(DBA)操作 1....

    Oracle游标视图和自定义函数

    ### Oracle游标、视图和自定义函数 #### 1. 游标 **1.1 游标的优势和类型** 在数据库应用开发过程中,游标作为一种强大的工具,为开发者提供了一种处理从表中检索出的数据的有效方法,特别是在需要逐条处理数据...

    JPublisher生成Oracle对象类型对应的Java对象例子

    在Oracle数据库中,PL/SQL和JAVA是两种常见的编程语言,它们可以协同工作,实现复杂的业务逻辑。在处理Oracle中的自定义对象类型...在实际开发中,尤其是处理大量Oracle自定义类型时,JPublisher是一个非常实用的工具。

    java、mysql以及oracle数据类型对照表

    Oracle数据库提供了更多的复杂数据类型,如OBJECT、ARRAY、REF,这些在Java中可以通过自定义类型映射或JDBC驱动的高级特性来处理。同时,Oracle的NCLOB和BFILE等非BLOB/CLOB类型用于存储特定类型的字符数据和大文件...

    oracle字段类型转换的处理

    在Oracle数据库中,字段类型转换是一项常见的...总的来说,Oracle字段类型转换是数据库管理中的常见任务,通过SQL语句或自定义脚本可以方便地完成。了解并熟练掌握这些转换方法,能帮助你在处理数据时更加灵活高效。

    java操作Oracle数据库——ARRAY、TABLE类型批量入库

    本文将深入探讨如何利用Java操作Oracle数据库中的ARRAY和TABLE类型,实现批量入库。 首先,了解Oracle的ARRAY和TABLE类型。ARRAY类型在Oracle中用于存储固定大小的数组,而TABLE类型则更灵活,可以存储变长的行集合...

    Oracle实用教程_04章_Oracle数据类型和函数[整理].pdf

    Oracle 数据库支持多种不同的数据类型,甚至允许用户自定义类型,但最常用的还是其基本数据类型。 Oracle 数据类型体系可以分为以下几类: 1. 字符型:包括 CHAR、NCHAR、VARCHAR2、NVARCHAR2 等。 CHAR 型数据...

    v512工作室_张利国_Java高端培训系列教材_Oracle实用教程_04章_Oracle数据类型和函数.

    Oracle提供了广泛的数据类型来满足各种应用场景的需求,包括基本的数据类型、复合类型以及用户自定义类型。 ##### 4.1.2 字符数据类型 **CHAR** CHAR是一种固定长度的字符数据类型,其字段长度可以从1到2000字节...

Global site tag (gtag.js) - Google Analytics