JDBC中操作Blob、Clob等对象
2009-03-22 14:50
369 查看
package eg; import java.io.*; import java.sql.*; public class BlobClobExample { public static void main(String[] args) { Connection conn = null; try { conn = JDBCUtils.getConnection(); // 建立连接 Statement s = conn.createStatement(); // 创建Statement对象 s.executeUpdate("drop table documents"); // 这句是为了避免再次创建表documents s .executeUpdate("CREATE TABLE documents(id INT, text CLOB(64 K) , photo Blob(1440 K))"); // 以上就是创建包含Clob和Blob对象的表的过程 // 和将一般的字段差不多,后面括号中代表该对象的大小,其语法为: // CLOB (length [{{K |M |G}]) 表示长度为K、M、G等,没有带表示比特 conn.commit(); // 提交操作 // 以下是将本地文件中,本程序的源文件加载为一个流,用于向数据库中写入Clob字段 File file1 = new File("BlobClobExample.java"); int len1 = (int) file1.length(); InputStream fis1 = new java.io.FileInputStream(file1); // 以下是将当前源代码目录的子目录“11”下的“1.JPG”文件加载为一个流, // 用于后面向数据库中写入Blob字段 File file2 = new File("c://11//1.JPG"); int len2 = (int) file2.length(); InputStream fis2 = new FileInputStream(file2); // 以上两个简单吧!! // 创建一个PreparedStatement对象,用于批量插入内容 // 使用PreparedStatement对象可以节省,数据库编译SQL指令的时间, // 因为在使用PreparedStatement对象时,该SQL语句是预先编译好了, // 对于某些变化的参数使用占位符(Place Holder)代替 // 这对于以后将要执行多次的同一操作,该操作仅仅是参数不同,是极其有利 // 比如在网页上输入客户信息时,用户要填入的数据基本是一样的(你可以填也可以不填) // 这时后台的数据库可以使用PreparedStatement对象,每次都是设置参数,执行操作 PreparedStatement ps = conn .prepareStatement("INSERT INTO documents VALUES (?, ?,?)"); ps.setInt(1, 250); ps.setAsciiStream(2, fis1, len1); ps.setBinaryStream(3, fis2, len2); // 以上三步是设置占位符的数值 ps.execute(); // 执行操作 // 以上四步可以重复执行。PreparedStatement就是为了适用于此用途 conn.commit(); // 以上完成了数据的写入 // 以下是数据的读出 ResultSet rs = s .executeQuery("SELECT text , photo FROM documents WHERE id = 250"); while (rs.next()) { Clob aclob = rs.getClob(1); // 和提取一般对象一样 InputStream is = rs.getAsciiStream(1); // 特殊的,对于与得到Clob的流 // 这是得到Clob、Blob流的第一种方法 // 以下是对流进行处理的过程。Clob本身是包含大字符的对象 // 顺其自然,以下是使用java IO中读取字符流的方法读取它 BufferedReader br = new BufferedReader( new InputStreamReader(is)); String line = null; while (null != (line = br.readLine())) { System.out.println(line); // 将其输出至屏幕,实际你可以按照需要处理 } is.close(); java.sql.Blob ablob = rs.getBlob(2); // 和操作其它基本类型的字段一样 System.out.println(ablob.length()); // 简单地操作Blob的实例 // 实际你可以使用Clob的API对其进行任何它允许的操作,请查API InputStream bis = ablob.getBinaryStream(); // 得到Blob实例的字节流 // 这是操作Clob、Blob等对象的第二种方法,也是最自然的用法 OutputStream os = new FileOutputStream("11.jpg"); // 用于将数据库中的Blob存放到目前目录的“11.jpg”文件中 int b = bis.read(); // 以下就是象操作其它java字节流一样操作了 while (b != -1) { os.write((char) b); b = bis.read(); } os.flush(); os.close(); bis.close(); } } catch (Exception e) { e.printStackTrace(); } finally { if (conn != null) conn.close(); } } }
相关文章推荐
- Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据
- 深入浅出JDBC-操作时间与大对象(Clob/Blob)
- JDBC中操作Blob、Clob等对象
- 对oracle大对象(Blob,Clob)操作(增,删,改)的C#代码
- oracle对大对象类型操作:blob,clob,nclob
- JDBC操作Oracle BLOB对象
- 【摘抄】oracle对大对象类型操作:blob,clob,nclob,bfile
- 利用JDBC操作Oracle CLOB和BLOB类型数据
- Spring 让 LOB 数据操作变得简单易行,LOB 代表大对象数据,包括 BLOB 和 CLOB 两种类型
- oracle的CLOB和BLOB (jdbc实现对其操作示例代码)
- JdbcDaoSupport 操作CLOB、BLOB数据字段
- oracle对大对象类型操作:blob,clob,nclob
- oracle对大对象类型操作:blob,clob,nclob
- oracle对大对象类型操作:blob,clob,nclob
- JDBC操作Oracle CLOB对象
- 通过JDBC和Hibernate对Clob和Blob的操作
- JDBC操作DB2 Clob、Blob字段的Bug探究
- oracle对大对象类型操作:blob,clob,nclob,bfile
- 从 Oracle 大字段(blob,clob)的读、写认识 Java JDBC操作全攻略
- JDBC操作大数据CLOB和BLOB