表结构如下:
create table APPLICATION
(
PROINSTID VARCHAR2(255) not null,
APPCONTENT VARCHAR2(4000) not null,
ATTACHMENT VARCHARARRAY
)
nested table ATTACHMENT store as COL_APPLICATION_ATTACHMENT
----------------------------------------------------------------------------------
VARCHARARRAY 是自定义嵌套表类型,结构如下:
create or replace type varchararray as table of varchar(200)
----------------------------------------------------------------------------------
插数据没问题,用pl/sql和jdbc都能插入,问题是查数据该怎么办呢?
且不说jdbc,连在pl/sql下面都不知道怎么查。
我的终极目标是在 jdbc下面查询
ResultSet rs = conn.createStatement().executeQuery("select proinstid,appcontent,attachment from application");
while(rs.next())
{
ResultSet rsi = rs.getArray("attachment").getResultSet();
while(rsi.next())
{
System.out.print(rsi.getString(1) + ",");
}
System.out.println("");
}
这样子写法没问题,但输出结果:
1,1,2,1,2,1,
--------------------------------------------------------------------------------------
这个结果显然是不正确的,不知道1,2是什么东西,正确(理想)的输出应该如下:
procexp.chm,
JScript 语言参考.chw,java精通swing程序设计.chm
无忧网络下载说明-msmir.net.txt,procexp.exe
ojdbc5.jar
--------------------------------------------------------------------------------------
虽然结果不对,但输出结构的个数是对应的。
如果把内循环改成:
while(rsi.next())
{
System.out.print(rsi.getString(2) + ",");
}
也就是取第二个字段,
输出结果如下:
???,???,???,???,???,???,
貌似是乱码,我无法确定,试图用iso-8859-1、utf-8之类的也转不出来。
哪位高手能指导一下? 给些新思路也行。感激不尽。
注:主要为了探寻知识,不想绕过去。我这里没有用存储过程来取数据。
create table APPLICATION
(
PROINSTID VARCHAR2(255) not null,
APPCONTENT VARCHAR2(4000) not null,
ATTACHMENT VARCHARARRAY
)
nested table ATTACHMENT store as COL_APPLICATION_ATTACHMENT
----------------------------------------------------------------------------------
VARCHARARRAY 是自定义嵌套表类型,结构如下:
create or replace type varchararray as table of varchar(200)
----------------------------------------------------------------------------------
插数据没问题,用pl/sql和jdbc都能插入,问题是查数据该怎么办呢?
且不说jdbc,连在pl/sql下面都不知道怎么查。
我的终极目标是在 jdbc下面查询
ResultSet rs = conn.createStatement().executeQuery("select proinstid,appcontent,attachment from application");
while(rs.next())
{
ResultSet rsi = rs.getArray("attachment").getResultSet();
while(rsi.next())
{
System.out.print(rsi.getString(1) + ",");
}
System.out.println("");
}
这样子写法没问题,但输出结果:
1,1,2,1,2,1,
--------------------------------------------------------------------------------------
这个结果显然是不正确的,不知道1,2是什么东西,正确(理想)的输出应该如下:
procexp.chm,
JScript 语言参考.chw,java精通swing程序设计.chm
无忧网络下载说明-msmir.net.txt,procexp.exe
ojdbc5.jar
--------------------------------------------------------------------------------------
虽然结果不对,但输出结构的个数是对应的。
如果把内循环改成:
while(rsi.next())
{
System.out.print(rsi.getString(2) + ",");
}
也就是取第二个字段,
输出结果如下:
???,???,???,???,???,???,
貌似是乱码,我无法确定,试图用iso-8859-1、utf-8之类的也转不出来。
哪位高手能指导一下? 给些新思路也行。感激不尽。
注:主要为了探寻知识,不想绕过去。我这里没有用存储过程来取数据。
我想在jdbc里,从ResultSet 中再取个ResultSet这种方式把数据拿出来(所谓嵌套嘛),有办法吗?
如果你坚持一定要取出数组,那可能先用ArrayDescriptor.createDescriptor创建一个对象,然后绑定对象到列,然后再把该对象转为数组,总之写出来的代码相当冗长并且难懂。
我也能得到这个对象,可我里面的方法貌似没有什么取数据的,能否帮我写详细点?
研究了一下午,每个结果不死心啊
----------------------------------------------------------
oracle.sql.ARRAY arr = (ARRAY)rs.getObject("attachment");
ArrayDescriptor ad = arr.getDescriptor();
public class Application
{
private String proinstid;
private String appcontent;
private String[] attachment;
public String getProinstid() {
return proinstid;
}
public void setProinstid(String proinstid) {
this.proinstid = proinstid;
}
public String getAppcontent() {
return appcontent;
}
public void setAppcontent(String appcontent) {
this.appcontent = appcontent;
}
public String[] getAttachment() {
return attachment;
}
public void setAttachment(String[] attachment) {
this.attachment = attachment;
}
public void setAttachment(String attachment) {
this.attachment = attachment.split(",");
}
}
的"16.4.2.6 Retrieving Array Elements into an oracle.sql.Datum Array"
三个问号显然也不是真正能代替字符的乱码,内容再长都是三个问号,所以转肯定也是装不出来的。你有什么好的建议吗?