Se encontró un requisito de este tipo: para consultar cuatro campos en una tabla de oracal, dos de los cuales son de tipo clob, deben convertirse a STRING en el backend, para poder llamar a los métodos subsiguientes en el programa; el resultado es un conjunto de resultados , similar a lo siguiente:
StringBuffer gridSQL = new StringBuffer("select data_area_code,name,XS,YS from map_grids_bak_20190718 where length(data_area_code)=15");
//获取对象数据集合
//null 的意思是不用给sql语句传参数
List<Object[]> list = this.getListBySql(gridSQL.toString(),null);
XS e YS son tipos clob. Sin embargo, cuando se rompe el punto y el código, se encuentra que los datos clob en la matriz son un objeto proxy. Cuando se convierte directamente en clob, las solicitudes no pueden ser oracle.sql.CLOB. I encontré muchas razones y descubrí que era una guía.Paquete incorrecto, no debe usar el paquete oracle.sql.CLOB, sino el paquete Java.sql.Clob. Realmente tomó mucho tiempo trabajar en la dirección incorrecta;
Después de seleccionar el paquete correcto, fuerce directamente la transferencia:
String xs = cn.o.utils.StringUtils.ClobToString((Clob)strings[2]);
String ys = cn.o.utils.StringUtils.ClobToString((Clob)strings[3]);
Finalmente, adjunte el código para la conversión de la herramienta: de hecho, se convierte mediante el método de flujo de archivos.
public static String ClobToString(Clob clob) {
String reString = "";
Reader is = null;
try {
is = clob.getCharacterStream();
} catch (Exception e) {
e.printStackTrace();
}
// 得到流
BufferedReader br = new BufferedReader(is);
String s = null;
try {
s = br.readLine();
} catch (Exception e) {
e.printStackTrace();
}
StringBuffer sb = new StringBuffer();
while (s != null) {
//执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
sb.append(s);
try {
s = br.readLine();
} catch (Exception e) {
e.printStackTrace();
}
}
reString = sb.toString();
return reString;
}