Java 执行删除和更新时停止

Java 执行删除和更新时停止,java,database,oracle,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.executeUpdat

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

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语句之后,我的应用程序就在那里被阻塞了。完全没有反应

有人知道发生了什么事吗


数据库是oracle 11g。

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

DELETE FROM t WHERE t.id = id

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

DELETE FROM t WHERE t.id = id

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

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

您误用了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的值。您误用了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的值; 您确定这里没有出现SQLException,因为“从t中删除,其中t.id=id”似乎是无效语句

s.executeUpdate(DELETE);
您确定这里没有出现SQLException,因为“DELETE FROM t WHERE t.id=id”似乎是无效语句,我找到了原因。自动提交标志设置为关闭。

我找到了原因。自动提交标志设置为关闭。

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

如果数据库在大量DML期间停止,可能是因为存档目标已满。将存档移动到备份,数据库将继续。

“然后我的应用程序就在那里被阻止了”。嗯,想指出应用程序在哪一行被阻止了吗?“然后我的应用程序就在那里被阻止了”。嗯,想指出应用程序在哪一行被阻止了吗?这会对什么有什么影响?除非您在单独的会话中执行这两条语句,否则考虑到您发布的代码示例,这似乎不太可能。这会对任何事情产生什么影响?除非您在单独的会话中执行这两条语句,否则考虑到您发布的代码示例,这似乎是不太可能的。