关于往Oracle的clob字段中写数据的问题 以下是部分代码: sql="insert into drug (title,keyword,category,picture,pic_memo,content,station,grid,inputdate) values('"+title+"','"+keyword+"','"+arry+"','"+picture+"','"+pic_memo+"',empty_clob(),'"+station+"','"+grid+"',sysdate+"+hours+")";
try { conn=ConnectionManagerFactory.getConnectionManager().getConnection("jdbc:oracle:thin:@localhost:1521:oracle1"); conn.setAutoCommit(false); stmt=conn.createStatement(); stmt.executeUpdate(sql); //取出最大的ID,既刚刚插入记录的ID sql="select max(id) as maxid from drug"; rs=stmt.executeQuery(sql); while (rs.next()) { maxid=rs.getString("maxid"); } rs.close(); //将CLOB字段类型的数据插入到数据库中 sql="select content from drug where id='"+maxid+"' for update "; rs=stmt.executeQuery(sql); oracle.sql.CLOB clobtt=null; while(rs.next()) { clobtt = (oracle.sql.CLOB)rs.getClob(1); } java.io.Writer wr = clobtt.getCharacterOutputStream(); wr.write(content); wr.flush(); wr.close(); rs.close(); conn.commit();
jsp处理clob和blob字段是比较麻烦,个人认为。 我这里有一些代码和注释,给你看看。//首先必须将自动提交修改为False,否则会出现“违反读取顺序”的错误 conn.setAutoCommit(false); //首先对blob/clob字段插入一条空记录,其中Text是blob/clob字段 String sql="insert into testpatent (ID,Text) values("+ID+", empty_clob())"; stmt.executeUpdate(sql); //手工提交 conn.commit();//通过select修改含blob/clob类型的记录时一定要锁定该行(通过for update关键字实现),否则Oracle会报错。 sql = "select Text from TableName where ID='"+ID+"' for update"; ResultSet rs = stmt.executeQuery(sql); if (rs.next()) { oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1); clob.putString(1, Text); sql = "update TableName set ID=?,Text=?,…… where ID='"+ID+"'"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1,ID); pstmt.setClob(2, clob); . . . pstmt.setString(6,ID); pstmt.executeUpdate(); pstmt.close(); } rs.close();
关于对Blob/Clob字段做查询,我记得应该是直接使用就可以了,具体我没有做过。gl
在JSP页面中,我直接用:stmt.executeUpdate("insert into(id,clob) into values('1','xxxxx')")也能写入数据库,这是为什么呢? 好象没你们说的那么麻烦,只是读取时有点麻烦谁能说一下吗?
以下是部分代码:
sql="insert into drug (title,keyword,category,picture,pic_memo,content,station,grid,inputdate) values('"+title+"','"+keyword+"','"+arry+"','"+picture+"','"+pic_memo+"',empty_clob(),'"+station+"','"+grid+"',sysdate+"+hours+")";
try
{ conn=ConnectionManagerFactory.getConnectionManager().getConnection("jdbc:oracle:thin:@localhost:1521:oracle1");
conn.setAutoCommit(false);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
//取出最大的ID,既刚刚插入记录的ID
sql="select max(id) as maxid from drug";
rs=stmt.executeQuery(sql);
while (rs.next())
{
maxid=rs.getString("maxid");
}
rs.close();
//将CLOB字段类型的数据插入到数据库中
sql="select content from drug where id='"+maxid+"' for update ";
rs=stmt.executeQuery(sql);
oracle.sql.CLOB clobtt=null;
while(rs.next())
{
clobtt = (oracle.sql.CLOB)rs.getClob(1);
}
java.io.Writer wr = clobtt.getCharacterOutputStream();
wr.write(content);
wr.flush();
wr.close();
rs.close();
conn.commit();
我这里有一些代码和注释,给你看看。//首先必须将自动提交修改为False,否则会出现“违反读取顺序”的错误
conn.setAutoCommit(false);
//首先对blob/clob字段插入一条空记录,其中Text是blob/clob字段
String sql="insert into testpatent (ID,Text) values("+ID+", empty_clob())";
stmt.executeUpdate(sql);
//手工提交
conn.commit();//通过select修改含blob/clob类型的记录时一定要锁定该行(通过for update关键字实现),否则Oracle会报错。
sql = "select Text from TableName where ID='"+ID+"' for update";
ResultSet rs = stmt.executeQuery(sql);
if (rs.next())
{
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1);
clob.putString(1, Text);
sql = "update TableName set ID=?,Text=?,…… where ID='"+ID+"'";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,ID);
pstmt.setClob(2, clob);
.
.
.
pstmt.setString(6,ID);
pstmt.executeUpdate();
pstmt.close();
}
rs.close();
好象没你们说的那么麻烦,只是读取时有点麻烦谁能说一下吗?