执行删除和更新时停止

时间:2011-05-18 20:30:45

标签: java database oracle

我正在做一个操作,先删除一条记录然后插入同一个表中,如下所示:

String delete = "DELETE FROM t WHERE t.id = id"
String insert = "INSERT INTO t VALUES (id, value1, value2)"

Statement s = conn.createStatement();
s.executeUpdate(delete);
s = conn.createStatement();
s.executeUpdate(insert);

然后我的应用程序在执行insert语句后就阻塞了。根本没有回应。

有人知道发生了什么事吗?

db是oracle 11g。

6 个答案:

答案 0 :(得分:2)

下面的代码不需要WHERE子句,因为你将删除id等于id的所有记录。那是意图还是你想删除一个特定的id?

DELETE FROM t WHERE t.id = id

答案 1 :(得分:1)

删除和插入后执行s.close()

答案 2 :(得分:1)

你滥用sql语句

String delete = "DELETE FROM t WHERE t.id = ?"
String insert = "INSERT INTO t VALUES (?, ?, ?)"

PreparedStatement s = null;
try{
    s = conn.prepareStatement(delete);
    s.setNString(1,id);
    s.executeUpdate();
}finally{if(s!=null)s.close();s = null;}
try{
    s = conn.prepareStatement(insert );
    s.setNString(1,id);
    s.setNString(2,value1);
    s.setNString(2,value2);
    s.executeUpdate();
}finally{if(s!=null)s.close();s = null;}

在您的代码中,您没有从本地变量传递任何内容,并且sql server不知道从哪里获取id,value1和value2的值

答案 3 :(得分:1)

s.executeUpdate(删除); 你确定你在这里没有得到一些SQLException,因为这个“DELETE FROM t WHERE t.id = id”似乎是无效的陈述

答案 4 :(得分:1)

我找到了原因。 AUTOCOMMIT标志设置为OFF。

答案 5 :(得分:0)

如果数据库在繁重的DML期间停止,则可能是由于存档目标已满。将存档移动到备份,数据库将继续。