2013-09-24 2 views
5

Więc celowo próbowałem złamać mój program i udało mi się.SQLite - wyjątek executeUpdate nie zostanie przechwycony, gdy baza danych nie istnieje? (Java)

Usunąłem bazę danych sqlite, z której korzysta program, gdy program był uruchomiony, po tym, jak już utworzyłem połączenie. Następnie podjąłem próbę zaktualizowania bazy danych w sposób przedstawiony poniżej.

Statement stmt; 
try 
{ 
    stmt = Foo.con.createStatement(); 
    stmt.executeUpdate("INSERT INTO "+table+" VALUES (\'" + itemToAdd + "\')"); 
} 
catch(SQLException e) 
{ 
    System.out.println("Error: " + e.toString()); 
} 

Problem polega na tym, że nie złapać wyjątek, a nadal działać jako jeśli baza danych została zaktualizowana pomyślnie. Tymczasem baza danych nawet nie istniała w tym miejscu, ponieważ to było po tym, jak ją usunąłem.

  • Czy to nie sprawdza, czy baza danych nadal istnieje podczas aktualizacji?
  • Czy muszę ręcznie sprawdzać połączenie z bazą danych, za każdym razem, gdy aktualizuję, aby upewnić się, że baza danych nie została uszkodzona/usunięta?
  • Czy tak się zwykle robi, czy jest prostsze/bardziej niezawodne podejście?

Dziękuję.

+0

Przed dalszą analizą, 1) Wydrukowałem ciąg połączenia i upewniłem się, że wskazuje on dowolną bazę danych, która została usunięta. 2) Upewnij się, że baza danych naprawdę nie działa. – kosa

+0

Na jakiej platformie pracujesz? Windows, Linux, Mac? –

Odpowiedz

1

Co ciekawe, odkryłem, że jeśli usunę swoją bazę danych podczas jej używania, a następnie spróbuję ją zaktualizować, aktualizuje bazę danych w nowej lokalizacji (w koszu!). Nie można go trwale usunąć, gdy znajduje się w koszu i uzyskujesz do niego dostęp za pośrednictwem programu.

0

Wygląda to tak nie jest SQLException, który jest wyrzucany ...

Spróbuj połowu każdy typ wyjątku i sprawdzić, czy masz swój błąd:

Statement stmt; 
try 
{ 
    stmt = Foo.con.createStatement(); 
    stmt.executeUpdate("INSERT INTO "+table+" VALUES (\'" + itemToAdd + "\')"); 
} 
catch(Exception e) 
{ 
    System.out.println("Error: " + e.toString()); 
} 

lub

Statement stmt; 
try 
{ 
    stmt = Foo.con.createStatement(); 
    stmt.executeUpdate("INSERT INTO "+table+" VALUES (\'" + itemToAdd + "\')"); 
} 
catch(Throwable e) 
{ 
    System.out.println("Error: " + e.toString()); 
} 
+0

Próbowałem 'Wyjątek' i' Throwable', i nadal mam ten sam problem – giant91

+0

Czy używasz transakcji? Jeśli tak, czy zleciłeś transakcję (tę, która usuwa bazę danych)? – Simon