Clob 字段转String

问题:

  在项目上,有大文本文档,需要存入clob 字段,如何取出clob 字段来? 应用的Mybatis框架

 

解决思路:

 第一: 若是能保证数据量小于4000的话, to_char(clob字段)  是一个非常简单省事的方案;

 第二:若是字段长度不能固定,肯定有大于4000 的数据量,这个时候,可以写一个实体类,

            然后 string 字段,然后get set操作;默认生成就可以;【也可以解决问题】;

第三: 就是需要写一个类,专门去做clob 转字符串处理;【这里着重讲解这个】

 

 

解决方案:

首先写这个类

public class OracleClob2String {

	public static String ClobToString(Clob clob) throws SQLException, IOException {

		String reString = "";
		Reader is = clob.getCharacterStream();// 得到流
		BufferedReader br = new BufferedReader(is);
		String s = br.readLine();
		StringBuffer sb = new StringBuffer();
		while (s != null) {// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
			sb.append(s + "\n");
			s = br.readLine();
		}
		reString = sb.toString();
		return reString;
	}

}

第二:在service层对获取的list<map<string,object>> 进行clob 转 string 

  需要注意的是:list<map<string,object>> 这里必须事object 接收信息,不能是string,

public List<Map<String, Object>> getTzgglist(Map<String, String> map) {
		List<Map<String, Object>> list = Dao.getTzggList(map);
		for (Map<String, Object> tz : list) {
			try {
				tz.put("ggnr",OracleClob2String.ClobToString((Clob)tz.get("ggnr")));
			} catch (SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		return list;
	}

完成任务收工~!

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中读取CLOB字段可以通过以下步骤实现: 第一步是连接数据库。可以使用JDBC来建立与数据库的连接。JDBC提供了一个标准的接口,可以通过使用适当的驱动程序连接到不同类型的数据库。 第二步是执行SQL查询语句。使用JDBC的Statement或PreparedStatement对象执行查询语句,并将结果集存储在ResultSet对象中。 第三步是从ResultSet对象中读取CLOB字段的内容。首先使用ResultSet的next()方法移动到结果集的下一行。然后,使用getClob()方法从ResultSet对象中获取CLOB字段的引用。接下来,可以使用Clob对象的getCharacterStream()方法获取一个Reader对象,并通过Reader对象逐行读取CLOB字段的内容。最后,关闭读取器和CLOB对象。 以下是一个示例代码: ```java Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 连接数据库 conn = DriverManager.getConnection(url, username, password); // 执行查询语句 String sql = "SELECT clob_column FROM table_name WHERE id = ?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, id); rs = pstmt.executeQuery(); // 从结果集中读取CLOB字段的内容 if (rs.next()) { Clob clob = rs.getClob("clob_column"); Reader reader = clob.getCharacterStream(); StringBuilder sb = new StringBuilder(); char[] buffer = new char[4096]; int bytesRead; while ((bytesRead = reader.read(buffer)) != -1) { sb.append(buffer, 0, bytesRead); } String clobContent = sb.toString(); // 处理CLOB字段的内容 System.out.println(clobContent); // 关闭读取器和CLOB对象 reader.close(); clob.free(); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭连接、语句和结果集 if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 以上就是Java读取CLOB字段的步骤。首先连接数据库,然后执行查询语句并从结果集中读取CLOB字段的内容,最后关闭连接、语句和结果集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值