2014-08-27 2 views
0

У меня проблема, когда я не могу заставить эту команду удалить. Каждый раз, когда я запускаю его, он просто блокирует базу данных и вылетаетSQLite Database блокируется командой Delete

Параметр id существует в базе данных База данных небольшая. Всего несколько таблиц. команды обновления работают отлично.

Идентификатор является в и в результате команда - DELETE from Employees where ID = 2;

public static void EmployeeDeleteByID(int idIn){ 

    Connection c = null; 
     Statement stmt = null; 
     try { 
      c = Connect(); 
      c.setAutoCommit(false); 
      System.out.println("Opened database successfully"); 

      stmt = c.createStatement(); 
      String sql = "DELETE from Employees where ID = " + idIn + ";"; 
      System.out.println(sql); 
      stmt.executeUpdate(sql); 
      c.commit(); 
      stmt.close(); 
      c.close(); 
     } catch (Exception e) { 
      System.err.println("Error 1 : " + e.getClass().getName() + ": " + e.getMessage()); 
      System.exit(0); 
     } 
     System.out.println("Operation done successfully"); 


} 

Ошибка после запуска: java.sql.SQLException: database is locked

+1

Итак, вы говорите, что даже не печатаете «Открытая база данных успешно»? – Tim

+0

Да, он правильно открывает базу данных, затем пытается удалить команду. это из консоли Удаленная база успешно УДАЛИТЬ от Сотрудников, где ID LIKE «2»; java.sql.SQLException: база данных заблокирована. Также тот же метод connect() работает над методами Update, которые работают нормально. – user237462

+0

Не работает, но плохо попробую еще раз. Ах, просто что-то понял. Тип идентификатора в базе данных - Integer, а не int - это имеет значение? Идентификатор также является уникальным индексом. – user237462

ответ

1

«база данных заблокирована» означает, что некоторые другие соединения все еще имеет активную транзакцию.

Если нет другого процесса доступа к базе данных, вы должны проверить все подключения в своей программе; по крайней мере один из них забыли commit().

+0

Ive буквально начал с открытия программы и сузил ее до этого метода. Где должна быть фиксация или как мне ее управлять? Только другой запрос, который, кажется, запускается до этого, создает JTable с SQL Query, но не блокирует базу данных. Его блокировка с помощью команды delete. – user237462

+0

* Некоторый * доступ к базе данных - это блокировка базы данных. Когда вы говорите, что есть только один, вы нашли преступника. –

+0

Я не думаю, что это потому, что, например, если у меня есть программа open, я могу запустить команду update, чтобы убедиться, что база данных не заблокирована, показывая JTable. Его 100% этот код в исходном сообщении вызывает проблему как-то. – user237462

0

Код действительно работает нормально.

Оказалось, что вызывается другой метод для заполнения JCombo, который удерживает соединение открытым из-за ошибки, вызванной вызовом нулевого значения из базы данных.

Это не было очевидно, поскольку в поле исключения не было кода.

Глубокая проблема, поэтому люди всегда делают ошибку, бросают какую-то трассировку стека или предупреждение.

Спасибо