我正在做一个操作,先删除一条记录然后插入同一个表中,如下所示:
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。
答案 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期间停止,则可能是由于存档目标已满。将存档移动到备份,数据库将继续。