2011-05-18 87 views
1

我做的操作,首先删除一条记录,然后插入到这样的同桌:时停止执行删除和更新

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); 

然后我的应用程序在执行插入语句后只是阻止那里。根本没有回应。

确实有人知道发生了什么事?

db是oracle 11g。

+1

“那么我的应用程序就在那里阻止”。嗯,请注意指出应用程序被屏蔽的哪一行? – 2011-05-18 20:35:03

回答

1

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

+0

这是如何影响任何东西?除非您在单独的会话中执行这两个陈述,而这看起来不太可能,因为您发布的代码示例不太可能。 – 2011-05-18 23:00:20

2

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

DELETE FROM t WHERE t.id = id 
+0

不,我只想删除一个 – Leon 2011-05-18 20:37:31

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

1

s.executeUpdate(delete); 你确定你没有在这里得到一些SQLException,因为这个“DELETE FROM t WHERE t.id = id”好像是无效的语句

0

如果数据库在重DML期间暂停,可能是归档目标已满。将档案移至备份,数据库将继续。