1 package readclobDemo.bao;
2
3 import java.io.IOException;
4 import java.io.Reader;
5 import java.sql.Clob;
6 import java.sql.Connection;
7 import java.sql.PreparedStatement;
8 import java.sql.ResultSet;
9 import java.sql.SQLException;
10
11 import jdbcutil.bao.JdbcUtil;
12
13 public class ReadClobDemo {
14
15 /**
16 CLOB用于存储大量的字符数据,程序的主要功能为从数据库中通过jdbc获取CLOB字段,将其转化为IO进行读取,
17 所以首先通过查询语句得到CLOB字段,再将CLOB从结果集中获得并将其转化为oracle.sql.CLOB类型进行写入操作
18 * @throws IOException
19 */
20
21
22
23 /* CREATE TABLE "HR"."CLOB_1"
24 ( "ID" NUMBER(*,0),
25 "CLOB_TEXT" CLOB
26 ) SEGMENT CREATION IMMEDIATE *///在oracle创建表CLOB_1;
27
28 public static void readclob(int id) throws IOException{
29
30
31 Connection conn=null;
32 PreparedStatement patst=null;
33 ResultSet rs=null;
34 String sql="select * from CLOB_1 where id=?";
35 try {
36 conn=JdbcUtil.getConnection(); //通过获得数据连接池JdbcUtil中分配的数据库连接接口进行数据库的连接
37 patst=conn.prepareStatement(sql);
38 patst.setInt(1, id);
39 rs=patst.executeQuery(); //返回结果集;
40
41 if(rs.next()){
42
43 Clob clob=rs.getClob("CLOB_TEXT"); //Clob对象在它被创建的事务处理期间有效
44 Reader rd=clob.getCharacterStream();
45
46 char[] chars = new char[1024]; //定义一个字符数组
47
48 int length=0;
49
50 System.out.print("CLOB_TEXT:");
51 //通过Io流读取返回int字节值转化为char类型直到没有字节,返回-1
52 while((length=rd.read(chars)) != -1) {
53
54 if(length==1024){
55
56 System.out.print(chars);
57
58 }else{
59
60 System.out.print(new String(chars,0,length));//不够长度1024的字符数组只显示有值的字符串
61
62 }
63
64 }
65
66
67 }
68
69 } catch (SQLException e1) {
70 e1.printStackTrace();
71 } finally{
72 JdbcUtil.free(rs, patst, conn);//调用JdbcUtil定义的free方法关闭各接口;
73 }
74
75
76 }
77 public static void main(String[] args) throws IOException {
78
79 readclob(1);
80
81 }
82
83 }
![]()