java对oracle中clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的也不是很清楚,我对网上资料进行了整理和总结,具体看代码:
写入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字段下,直接将数据读取出来。
