有几个需要注意的地方:
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 日期处理函数是数据库管理系统中非常重要的一部分,最近看到有人在做 T-SQL 与 PL/SQL 的转化,问了些有关时间函数的处理。在 PL/SQL 中,Oracle 提供了其他的方法来处理日期函数,...
Oracle 自定义聚合函数-分析函数 Oracle 自定义聚合函数是一种强大且灵活的功能,允许用户根据自己的需求创建自定义的聚合函数。聚合函数是一种特殊的函数,它可以对一组数据进行处理和计算,并返回一个结果。 ...
本文将详细介绍Oracle自定义函数的定义、使用方法以及一些高级特性。 #### 二、基本语法与定义 1. **定义函数的基本语法**: ```sql CREATE [OR REPLACE] FUNCTION function_name (参数列表) RETURN 返回类型 ...
### Oracle自定义异常知识点 #### 一、Oracle异常处理机制简介 在Oracle PL/SQL编程中,异常处理是一项非常重要的功能。它可以帮助开发者捕获并处理程序运行时可能发生的错误情况,确保应用程序能够稳定可靠地运行...
以上就是关于“C#调用Oracle UDT自定义结构数组类型”的详细说明,通过这样的方式,开发者可以在C#中充分利用Oracle数据库的高级特性,实现更复杂的数据操作。在实际项目中,根据具体的业务需求,可能还需要处理更多...
Oracle数据库在处理错误和异常时有一套完整的机制,这些异常主要分为预定义异常和自定义异常。预定义异常是Oracle系统已经内置的一些常见错误,它们都有对应的错误代码(ORA-xxx)。下面,我们将深入探讨一些常见的...
本文将深入探讨Oracle自定义聚集函数的实现与应用,包括其四个主要组成部分:`ODCIAggregateInitialize`、`ODCIAggregateIterate`、`ODCIAggregateMerge`以及`ODCIAggregateTerminate`。 ### ...
本文将深入探讨Oracle表类型表变量的使用,以及如何通过提供的SQL脚本进行实践操作。 首先,让我们了解什么是Oracle表类型。表类型是一种自定义的数据类型,它可以像普通数据库表一样存储数据,但存在于PL/SQL环境...
在IT行业中,数据库管理系统(DBMS)如...总结来说,这个Oracle自定义函数是针对统一社会信用代码的效验工具,遵循国家的效验规则,确保在数据库中存储的USCC信息的准确无误,这对于在中国进行合规操作的企业至关重要。
在C#中,我们需要创建一个表示Oracle自定义类型的类,然后提供一个方法将List转换为OracleDbType对应的数组。 ```csharp public class MyType { public int Id { get; set; } public string Name { get; set;...
Oracle Create Type 是 Oracle 数据库中的一种强大工具,可以用于创建自定义类型,例如对象类型、数组类型、表类型等。在本文中,我们将详细介绍 Oracle Create Type 的概念、语法和应用。 1. Oracle Create Type ...
在 Hibernate 框架中,使用自定义类型映射 Oracle 中的 LONG 类型字段是一种常见的解决方案。通过实现 UserType 接口,我们可以定制 LONG 类型字段的读写操作。在本例中,我们定义了一个名为 CustomLong 的类,该类...
6. **对象型**:Oracle支持自定义数据类型,如CREATE TYPE语句定义的对象类型。 7. **集合型**:VARRAY和NESTED TABLE是两种集合类型,用于存储数组或表格形式的数据。 二、Oracle 10g数据库管理员(DBA)操作 1....
### Oracle游标、视图和自定义函数 #### 1. 游标 **1.1 游标的优势和类型** 在数据库应用开发过程中,游标作为一种强大的工具,为开发者提供了一种处理从表中检索出的数据的有效方法,特别是在需要逐条处理数据...
在Oracle数据库中,PL/SQL和JAVA是两种常见的编程语言,它们可以协同工作,实现复杂的业务逻辑。在处理Oracle中的自定义对象类型...在实际开发中,尤其是处理大量Oracle自定义类型时,JPublisher是一个非常实用的工具。
Oracle数据库提供了更多的复杂数据类型,如OBJECT、ARRAY、REF,这些在Java中可以通过自定义类型映射或JDBC驱动的高级特性来处理。同时,Oracle的NCLOB和BFILE等非BLOB/CLOB类型用于存储特定类型的字符数据和大文件...
在Oracle数据库中,字段类型转换是一项常见的...总的来说,Oracle字段类型转换是数据库管理中的常见任务,通过SQL语句或自定义脚本可以方便地完成。了解并熟练掌握这些转换方法,能帮助你在处理数据时更加灵活高效。
本文将深入探讨如何利用Java操作Oracle数据库中的ARRAY和TABLE类型,实现批量入库。 首先,了解Oracle的ARRAY和TABLE类型。ARRAY类型在Oracle中用于存储固定大小的数组,而TABLE类型则更灵活,可以存储变长的行集合...
Oracle 数据库支持多种不同的数据类型,甚至允许用户自定义类型,但最常用的还是其基本数据类型。 Oracle 数据类型体系可以分为以下几类: 1. 字符型:包括 CHAR、NCHAR、VARCHAR2、NVARCHAR2 等。 CHAR 型数据...
Oracle提供了广泛的数据类型来满足各种应用场景的需求,包括基本的数据类型、复合类型以及用户自定义类型。 ##### 4.1.2 字符数据类型 **CHAR** CHAR是一种固定长度的字符数据类型,其字段长度可以从1到2000字节...