JDBC操作CLOB类型字段

CLOB(Character Large Object) 存储为数据库表某一行中的一个列值。

java.sql.Clob接口提供一些方法来获SQL CLOB (Character Large Object) 值长度、在客户端实现 CLOB 值、搜索 CLOB 值中的子字符串或 CLOB 对象、更新 CLOB 值等。

接口 ResultSet、CallableStatement 和 PreparedStatement 中的方法(如 getClob 和 setClob)允许编程人员访问 SQL CLOB 值。

 

 1 import java.sql.DriverManager;
 2 import java.sql.Connection;
 3 import java.sql.PreparedStatement;
 4 import java.sql.ResultSet;
 5 import java.sql.Clob;
 6 import java.io.Writer;
 7 import java.io.Reader;
 8 
 9 public class Test {
10     public static void main(String[] args) throws Exception{
11         Class.forName("oracle.jdbc.driver.OracleDriver");
12         Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "LinuSiyu", "Siyux");
13         
14         insertClob(conn);
15         readClob(conn);
16         
17         conn.close();
18     }
19 
20     static void insertClob(Connection conn) throws Exception {
21         conn.setAutoCommit(false);
22         PreparedStatement ps= conn.prepareStatement("SELECT CLOB_TEXT FROM TB_CLOB_TEST WHERE ID=? FOR UPDATE");
23         ps.setInt(1, 123);
24         ResultSet rs = ps.executeQuery();
25         Clob clob = null;
26         if(rs.next()) {
27             clob = rs.getClob(1);
28         }
29         String str = "123abc一二三";
30         clob.setString(1, str); 
31 
32         String str3 = "三";
33         Writer writer = clob.setCharacterStream(7);
34         writer.write(str3);
35         writer.flush();
36         writer.close();
37 
38         rs.close();
39         conn.commit();
40         ps.close();
41     }
42 
43     static void readClob(Connection conn) throws Exception{
44         PreparedStatement ps = conn.prepareStatement("SELECT CLOB_TEXT FROM TB_CLOB_TEST WHERE ID=?");
45         ps.setInt(1, 123);
46         ResultSet rs = ps.executeQuery();
47         if(rs.next()) {
48             Clob clob = rs.getClob("METRICSRESULT");
49             Reader rd = clob.getCharacterStream();
50             int len = 10;
51             char [] str = new char[10];
52              while(true){
53                 int i = rd.read(str);
54                 if(i == -1)
55                     break;
56                 if(i < len){
57                     for( int j = 0; j < i; j++)
58                         System.out.print(str[j]);
59                     break;
60                 }
61                 System.out.print(str);
62             }
63             System.out.println(); 
64         }
65     }
66 }

setString(long pos, String str)将字符串str插入clob的第pos个字符位置,pos最前边的字符为第1个,pos不可以小于1; 插入时会从第pos个字符开始向后覆盖,覆盖不到的字符不受影响。 如果pos值大于clob值的长度+1,行为是不确定的,oracle的JDBC实现是使用空格补齐长度,并执行插入,其它数据库实现有可能抛出异常。
posted @ 2016-05-26 15:25  LinuSiyu  阅读(1156)  评论(0编辑  收藏  举报