博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jdbc读写lob(blob+clob)
阅读量:4109 次
发布时间:2019-05-25

本文共 2302 字,大约阅读时间需要 7 分钟。

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

 

转载地址:http://zfasi.baihongyu.com/

你可能感兴趣的文章
Jump Game 动态规划
查看>>
Binary Tree Maximum Path Sum 自底向上求解(重重重重)
查看>>
Subsets 深搜
查看>>
Subsets II
查看>>
Edit Distance 字符串距离(重重)
查看>>
Gray Code 格雷码
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
web.py 0.3 新手指南 - 如何用Gmail发送邮件
查看>>
web.py 0.3 新手指南 - RESTful doctesting using app.request
查看>>
web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
查看>>
web.py 0.3 新手指南 - 多数据库使用
查看>>
一步步开发 Spring MVC 应用
查看>>
python: extend (扩展) 与 append (追加) 的差别
查看>>
「译」在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢?...
查看>>
谷歌阅读器将于2013年7月1日停止服务,博客订阅转移到邮箱
查看>>
浅谈JavaScript的语言特性
查看>>
LeetCode第39题思悟——组合总和(combination-sum)
查看>>
LeetCode第43题思悟——字符串相乘(multiply-strings)
查看>>
LeetCode第44题思悟——通配符匹配(wildcard-matching)
查看>>
LeetCode第45题思悟——跳跃游戏(jump-game-ii)
查看>>