Java中delete删除不了数据
初学者,大致描述一下功能。是做个缓存,代码家里木有...
数据库中有一个字段是CLOB类型,查询CLOB和插入CLOB都已经解决。但是最开始好用的删除竟然崩溃了。
(1)查询数据(启用缓存)→查询缓存表(缓存表有信息)→读取缓存表
(2)查询数据(启用缓存)→查询缓存表(缓存表无信息)→正常查询→查询结果插入缓存表
(3)查询数据(不启用缓存)→查询缓存表(缓存表有信息)→删除缓存表中信息→正常查询→查询结果插入缓存表
(4)查询数据(不启用缓存)→查询缓存表(缓存表无信息)→正常查询→查询结果插入缓存表
删除功能最初是好用的,因为插入CLOB字段数据量大于4000,通过这个方法解决了插入问题,但是删除功能崩溃,考虑了屏蔽了自动提交,添加提交也木有用。
将大字段存入Oracle数据库CLOB字段代码大致如下。其中有select for update锁表和自动提交改成false.
JAVA代码如下:
import java.sql.*;
import oracle.jdbc.OracleResultSet;
import oracle.sql.CLOB;
public class ClobTest {
public static void main(String[] args)throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
conn.setAutoCommit(false);
//下面往数据库里加入一行,其中value字段设置其值为empty_clob(),即设置为空值,以便接下来更改
PreparedStatement stmt = conn.prepareStatement("INSERT INTO clob_test VALUES (1,empty_clob())");
stmt.execute();
//下面执行SELECT查询,以取得一个oracle.sql.CLOB对象
//然后调用CLOB对象的putChar()方法写入数据。
stmt = conn.prepareStatement("SELECT value FROM clob_test FOR UPDATE");
ResultSet rs = stmt.executeQuery();
rs.next();
CLOB clob = ((OracleResultSet)rs).getCLOB(1);
clob.putChars(1,"this is a clob test!!!".toCharArray());
//这里把上面得到的已经写入数据的clob对象上传到数据库
stmt = conn.prepareStatement("UPDATE clob_test SET value=?");
stmt.setClob(1,clob);
stmt.execute();
conn.commit();
//检验结果。
stmt = conn.prepareStatement("SELECT * FROM clob_test");
rs = stmt.executeQuery();
rs.next();
Clob clob1 = rs.getClob("value");
String s = clob.getSubString((long)1,(int)clob.length()-1);
System.out.println(s);
//收尾工作
rs.close();
stmt.close();
conn.close();
}
}
------解决方案--------------------
几个地方修改一下。
1.stmt.execute();
==>
stmt.executeUpdate();
2.stmt = conn.prepareStatement前加stmt.close();