写入clob数据 import java.io.Writer; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestClobIn { public static void main(String args[]){ String data="this is a long passage!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"; Writer outStream = null; //通过JDBC获得数据库连接 try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ewins", "scott", "tiger"); con.setAutoCommit(false); Statement st = con.createStatement(); //插入一个空对象empty_clob(),这个是必须的 st.executeUpdate("insert into TESTCLOB(ID, NAME, CLOBATTR)values(2,'thename', empty_clob())"); //锁定数据行进行更新,注意“for update”语句,这里不用for update锁定不可以插入clob ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update"); if (rs.next()) { //得到java.sql.Clob对象后强制转换为oracle.sql.CLOB oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR"); outStream = clob.getCharacterOutputStream(); //data是传入的字符串,定义:String data char[] c = data.toCharArray(); outStream.write(c, 0, c.length); } outStream.flush(); outStream.close(); con.commit(); con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 读取clob数据 import java.io.InputStream; import java.io.Reader; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; public class TestClobOut { public static void main(String args[]){ String data; Reader inStream=null; //获得数据库连接 Connection con = ConnectionFactory.getConnection();//ConnectionFactory类是另外定义的,不必纠结 con.setAutoCommit(false); Statement st = con.createStatement(); //不需要“for update” ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1"); if (rs.next()) { java.sql.Clob clob = rs.getClob("CLOBATTR"); inStream = clob.getCharacterStream(); char[] c = new char[(int) clob.length()]; inStream.read(c); //data是读出并需要返回的数据,类型是String data = new String(c); inStream.close(); } inStream.close(); con.commit(); con.close(); } } 对比我们可以看出,无论出库入库,都要对clob数据类型进行查询操作,写入clob数据相对来说更复杂一点,需要先插入empty_clob()值,然后使用带“for update”的查询语句锁定更新行,最后实例化输出流并对clob类型字段数据进行写入操作;读取clob相对轻松一些,利用getCharacterStream方法得到输入流,从数据库中clob字段下,直接将数据读取出来。 本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:https://www.linuxidc.com/Linux/2013-06/86381.htm