остановлено при выполнении удаления и обновления - PullRequest
1 голос
/ 19 мая 2011

Я делаю операцию, чтобы сначала удалить запись, а затем вставить ее в ту же таблицу, например:

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

, после чего мое приложение просто заблокировало там после выполнения оператора вставки.Ответа нет вообще.

Кто-нибудь знает, что происходит?

БД - оракул 11 г.

Ответы [ 6 ]

2 голосов
/ 19 мая 2011

Приведенный ниже код не нуждается в предложении WHERE, так как вы удалите все записи из t, где id равен id. Это было намерение или вы хотите удалить определенный идентификатор?

DELETE FROM t WHERE t.id = id
1 голос
/ 19 мая 2011

Я нашел причину. флаг AUTOCOMMIT установлен на OFF.

1 голос
/ 19 мая 2011

s.executeUpdate (удаление);Вы уверены, что у вас нет некоторого исключения SQLEx здесь, потому что это "УДАЛИТЬ ОТ ГДЕ t.id = id" кажется неверным утверждением

1 голос
/ 19 мая 2011

вы неправильно используете операторы 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 не знал, где взять значения id, value1 и value2

1 голос
/ 19 мая 2011

сделать s.close () после удаления и вставки

0 голосов
/ 24 мая 2011

Если база данных останавливается во время тяжелого DML, это может быть связано с переполнением места назначения архива. Переместите архивы в резервную копию, и база данных продолжит работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...