欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

oracal中的clob类型转string

程序员文章站 2022-03-04 14:48:03
...

遇到这样一个需求:要从oracal中查询出一个表中的四个字段,其中有两个字段是clob类型的,在后端需要将其转换成STRING,才能调用程序内的后续方法;查询的结果是个结果集,类似下面:

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,YS是clob类型,然而断点跟代码时,发现数组中的clob数据是代理对象,直接强转成clob时,提示cannot to be oracle.sql.CLOB,找了很多原因,发现原来是导错包了,不应该用oracle.sql.CLOB包,而是用Java.sql.Clob包才行,真是花了很多时间向一个错误方向努力了;

选用正确的包后,直接强转:

String xs = cn.o.utils.StringUtils.ClobToString((Clob)strings[2]);
String ys = cn.o.utils.StringUtils.ClobToString((Clob)strings[3]);

最后附上工具类转换的代码:其实就是用文件流的方法转换的

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;
	}

 

相关标签: 后端