jdbc读写lob(blob+clob)

2 篇文章 0 订阅
1 篇文章 0 订阅

1.说明

           数据库在存储大对象时,一般采用lob。二进制大对象称为blob,字符型大对象称为clob。

2.出库

            从数据库中获取clob采用的方法是rs.getClob(int columnindex);获取blob采用的方法是rs.getBlob(int columnindex).在获取到大字段之后我们可以生成对应的字符流、字节流,然后根据流的方式得到我们想要的结果。(从大对象到流的转换请参考jdk帮助文档blob,clob)

           具体代码如下:

	public static void testReadLob(){
		StringBuffer sql = new StringBuffer();
		sql.append(" SELECT ID ,CONTENT, IMAGE FROM T_TEST ");
		sql.append(" WHERE ID = ? ");
		System.out.println("=====sql===="+sql.toString());
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try{
			conn = ConnectionFactory.getConnection();
			ps = conn.prepareStatement(sql.toString());
			ps.setInt(1, 1);
			rs = ps.executeQuery();
			while(rs.next()){
				Clob clob = rs.getClob(2);
				Blob blob = rs.getBlob(3);
				System.out.println(clob+"======="+blob);
				
				Reader reader = clob.getCharacterStream();
				System.out.println("===content0=="+StringUtil.clobToString(reader));//把获取到得clob转换成字符串
				
				InputStream is = blob.getBinaryStream();//可以生成byte数组或者图片文件
				System.out.println("==image==="+FileOperationUtil.formInputStreamToFile								(is, "E:\\cc.jpg",blob.length()));
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			ConnectionFactory.releaseConnection(conn, ps, rs);
		}
		
	}

3.入库

            再写入数据时,首先获取空对象,具体方法是connection.createBlob()、connection.createClob().获取之后可以对空对象进行赋值。

           具体代码如下:

	public static void testInsertLob(){
		StringBuffer sql = new StringBuffer();
		sql.append(" INSERT INTO T_TEST(ID,CONTENT,IMAGE)VALUES(?,?,?) ");
		System.out.println("=====sql===="+sql.toString());
		Connection conn = null;
		PreparedStatement ps = null;
		try{
			conn = ConnectionFactory.getConnection();
			Blob blob = conn.createBlob();
			OutputStream ops = blob.setBinaryStream(1);
			InputStream is = new FileInputStream("E:\\cc.jpg");
			byte[] bytes = new byte[is.available()];
			int count = -1;
			while((count=is.read(bytes))!=-1){
				ops.write(bytes, 0, count);
			}
			ops.flush();//注意这个方法一定要执行
			System.out.println(blob);
			Clob clob = conn.createClob();
			String content = "2313dfdafa你好";
			clob.setString(1, content);
			ps = conn.prepareStatement(sql.toString());
			ps.setInt(1, 2);
			ps.setClob(2, clob);
			ps.setBlob(3, blob);
			ps.executeUpdate();
			ops.close();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			ConnectionFactory.releaseConnection(conn, ps, null);
		}
	}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值