怎么读取orcl数据库,表中字段是clob类型的一条数据?

A表card字段是clob类型的,里面存储的是和properties文件内容中一样的存储方式,
例如:select.producttype.CPC10313.text=中银王府井百货卡
select.producttype.CPC10313.code=CPC10313
select.producttype.CPC10313.isphoto=0

select.producttype.CPC10318.text=欧尚阿卡中银联名卡
select.producttype.CPC10318.code=CPC10318
select.producttype.CPC10318.isphoto=0

我只想要其中的一条数据,但我读取出所有数据是乱码,代码如下:
String strSql = "select properties from boc_bccs_sysparam b where b.id=3";
ResultSet rs = stmt.executeQuery(strSql);
if (rs.next()) {
CLOB clob = ((OracleResultSet) rs).getCLOB(1);
if (clob != null) {
Reader reader = clob.characterStreamValue();

                String string = IOUtils.toString(reader);
                string=new String(string.getBytes("ISO-8859-1"),"GBK");
                InputStream inputStream = IOUtils.toInputStream(string);
                Properties props = new Properties();

                props.load(inputStream);
                Set<Entry<Object, Object>> entrySet = props.entrySet();
                ProductType productType=null;
                for(Entry<Object,Object> entry:entrySet){
                    String key=(String) entry.getKey();
                    String value=(String) entry.getValue();
                    if(key.startsWith                ("select.producttype"&&key.endsWith("text")){
                        String[] keyArr=key.split("\\.");
                        productType=new ProductType();
                        productType.setCode(keyArr[2]);
                        productType.setText(value);
                        productTypeList.add(productType);
                    }
                }

运行结果如下:
CPC10205===??????????????6????????????¨??ê????±í
CPC20207===????????JCB°????????¨
CPC10001===??????????????????¨??ê????±í
CPC20234===????????·????????????????????????????¨
CJY03===??????????????????????????¨

[b]那就在getvalue的时候,转码转回来。
[/b]
[code="java"]
String value=(String) entry.getValue();

// 试试
value = new String(value.getByte("ISO8859-1"),"GBK");
[/code]

[code="java"]Reader reader = clob.characterStreamValue();

String string = IOUtils.toString(reader);
string=new String(string.getBytes("ISO-8859-1"),"GBK");
InputStream inputStream = IOUtils.toInputStream(string);[/code]

乱码,应该产生于这一块

[b]改成如下试试,即传入到Properties中的是Reader。[/b]

[code="java"]
String string = IOUtils.toString(reader);
string=new String(string.getBytes("ISO-8859-1"),"GBK");

// 确认上述步骤后,string是没有乱码?

System.out.println(string);

//InputStream inputStream = IOUtils.toInputStream(string);

StringReader reader = new StringReader(string);
Properties props = new Properties();

//props.load(inputStream);

props.load(reader);[/code]

先用pl/sql连接数据库看看数据库中是不是乱码.
有可能在存入时就乱码了

[quote]string确实是乱码,但当string不是乱码时,最后取出的值还是乱码,props不能加载字符串啊[/quote]

[color=blue][b]首先,将String改为正常的形式。该问题可能出现在:[/b][/color]

[code="java"]Reader reader = clob.characterStreamValue();
String string = IOUtils.toString(reader);
string=new String(string.getBytes("ISO-8859-1"),"GBK");
[/code]
[b]
逐步调试。[/b]

[color=blue][b]
其次,prop不可以加载String,但是可以Reader呀。通过StringReader将String转为Reader就可了。[/b][/color]

[b]不好意思,这是1.6后才有的方法。[/b]

[code="java"]public void load(Reader reader)[/code]
[b]
问题在于String的乱码。String的乱码解决了?[/b]

String string = IOUtils.toString(reader);
打印这里的string 看看是不是乱码??