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 よりも長くならないことが確実にわかっているので、その内容に文字列を使用します。使用される「各国文字セット」はUnicodeです。
その文字列から生成された JSON では、コンマ、ハイフン、ダッシュ、一重引用符、ドット、括弧、コロンなどの文字が正しく処理されていることがわかりますが、左一重引用符/ U+2018 ( ' ' ) のような特殊文字には問題があります。 、正しく表示されません。また、テキストに改行文字( \n ) と引用符( \" ) が表示されます。
このような形式のテキストを消費者に返すのは正しいですか、それともより適切に/別の方法で処理する必要がありますか?