首先我们要明确oracle中varchar2的最大长度是:4000个字节。
当我们要存储一段大的文本的时候就要考虑varchar2时候能够存下这么大的数据了,比如一篇文章,如果超过了4000个字节,就要考虑存放到clob.如何读取数据库中的clob字段和插入一条记录呢?
SQL> set serveroutput on; SQL> desc big_text; Name Type Nullable Default Comments -------- ---- -------- ------- -------- BIG_TEXT CLOB Y SQL>
数据库中的表,非常干净。一个字段
1插入一条记录到表中
static void create() throws SQLException, IOException { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtil.getConnection(); String sql = "insert into big_text values (?) "; ps = conn.prepareStatement(sql); File file = new File("src/cj/JdbcUtil.java"); Reader reader = new BufferedReader(new FileReader(file)); ps.setCharacterStream(1, reader, (int) file.length()); int i = ps.executeUpdate(); reader.close(); System.out.println("i=" + i); } finally { JdbcUtil.free(rs, ps, conn); } }
特别注意:
ps.setCharacterStream(1, reader, (int) file.length());
prepareStatement的setCharacterStream
2.从数据库中读取一条记录
static void read() throws SQLException, IOException { Connection conn = null; Statement st = null; ResultSet rs = null; try { conn = JdbcUtil.getConnection(); st = conn.createStatement(); String str = "select big_text from big_text"; rs = st.executeQuery(str); while (rs.next()) { Clob clob = rs.getClob(1); Reader reader = clob.getCharacterStream(); File file = new File("JdbUtils_bak.java"); Writer writer = new BufferedWriter(new FileWriter(file)); char[] buff = new char[1024]; for (int i = 0; (i = reader.read(buff)) > 0;) { writer.write(buff, 0, i); } writer.close(); reader.close(); } } finally { JdbcUtil.free(rs, st, conn); } }
Clob clob = rs.getClob(1);