本文共 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/