Oracle NCLOB中的特殊字符

时间:2016-04-04 01:45:21

标签: java stored-procedures oracle10g nclob

我正在处理Oracle 10g数据库,并提供了以下存储过程:

 procedure get_synopsis (
   p_id in  my_schema.products.p_id%type,
   p_synopses out sys_refcursor);  -- cursor of - synopsis_type, synopsis_text

在我的Java代码中,我以这种方式准备语句:

String idForDb = fromIdUrlToIdDb(prodIdUrl); 
statement.registerOutParameter(1, OracleTypes.VARCHAR);
statement.setString(1, idForDb );
statement.registerOutParameter(2, OracleTypes.CURSOR);

我以这种方式得到了我需要的数据:

String defaultSyn, nonDefSyn;

String returnedId = ((OracleCallableStatement)stm).getString(1);
try ( ResultSet synopses = ((OracleCallableStatement)stm).getCursor(2) ){ // p_synopses - cursor of: synopsis_type, synopsis_text

    while( synopses!=null && synopses.next() ){

        String type = synopses.getString(1) != null ? synopses.getString(1).toUpperCase() : null;

        if( type != null ){

            StringBuilder sb = new StringBuilder();
            BufferedReader br = new BufferedReader( synopses.getClob(2).getCharacterStream() );
            String line;

            while ((line = br.readLine()) != null) {
               sb.append(line).append("\n");
            }

            if("DEFAULT".equals(type)){
                defaultSyn = sb.toString();
            }else if("NONDEFAULT".equals(type)){
                nonDefSyn = sb.toString();
            }

            // ...
        }
    }
}

SYNOPSIS_TEXT字段是 NCLOB ,但我使用字符串作为其内容,因为我确信它不会比MAX_INTEGER长。 " N 字符集"使用的是 Unicode

在从该字符串生成的JSON中,我可以看到正确处理的字符,如逗号,超级,短划线,单引号,点,括号,冒号等但是我遇到像左单引号 / U + 2018(''),未正确显示。我还可以在文本中看到换行符(\ n)和引号(\")。

以这种格式向消费者返回文字是否正确,还是应该更好/不同地处理?

0 个答案:

没有答案