Skocz do zawartości
joorvishoon

[java] Problemy Z Update'em W Sqlite Jdbc

Rekomendowane odpowiedzi

Witam wszystkich. Mam mały projekcik w którym muszę przechowywać dane w bazie SQLite. Używam do tego sterownika SQLite JDBC. Zapisuję do bazy 4 kategorie danych - marki aut, modele, zestawy części, i poszczególne części w zestawach (czyli struktura dosyć prosta). Wszystko ładnie działa dopóki nie trzeba zmodyfikować danych jakiejś części, lub jej usunąć. Dla innych danych te operacje są bezproblemowe, a robione niemal identyczną sekwencją poleceń, co w metodach zmieniających dane części lub kasujące ją. Przy wykonywnaiu update albo delete na częściach JDBC wypluwa błąd:

 

java.sql.SQLException: cannot commit transaction - SQL statements in progress

 

przy wykonywaniu ostatecznego zapytania mającego uaktualnić lub skasować rekord. Baza tworzy wtedy plik -journal, który oczywiście przechowuje zmiany do czas zamknięcia programu, potem wszystkie operacje zostają usunięte i baza jest jakbym nic w niej nie zmieniał. Oczywiście podobne operacje działają bezproblemowo dla marek samochodów modeli etc. mimo, że jak mówiłe robi to niemal identyczny kod. Poniżej przykładowa metoda robiąca update:

 

public boolean updateCzesc(String marka,String model,String zestaw,String stara,String nowa, String cena, String kod, String x, String y){		try{			Statement stat = conn.createStatement();			String query = "select id_marka from Marki where nazwa = '"+marka+"';";			ResultSet result = stat.executeQuery(query);			result.next();			int id_mark = Integer.parseInt(result.getString("id_marka"));			result.close();			stat.close();			stat = conn.createStatement();			query = "select id_model from Modele where id_marka = "+id_mark+" and " +					"nazwa = '"+model+"';";			result = stat.executeQuery(query);			int id_model = Integer.parseInt(result.getString("id_model"));			result.close();			stat.close();			stat = conn.createStatement();			query = "select id_zestaw from Zestawy where id_model = "+id_model+" and " +					"nazwa = '"+zestaw+"';";			result = stat.executeQuery(query);			result.next();			int id_zestaw = Integer.parseInt(result.getString("id_zestaw"));			result.close();			stat.close();			stat = conn.createStatement();						query = "update Czesci set nazwa='"+nowa+"',cena='"+cena+"',kod='"+kod+"',x='"+x+"',y='"+y+"'" +					"where id_zestaw="+id_zestaw+" and nazwa='"+stara+"';";			stat.executeUpdate(query);			result.close();			stat.close();			return true;		} catch (SQLException e) {			e.printStackTrace();			return false;		}	}

Połączenie jest ustawione na automatyczne potwierdzanie zmian. JAkby ktoś wiedział ocb, to proszę o szybką odpowiedź bo niedługo muszę oddać projekt.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Struktura jest jak najbardziej w porządku, na bardzo podobnych tabelach bezproblemu tego typu funkcje pracują.

 

Jako zależności potworzyłem triggery, więc klucza obcego używającego wewnętrznych mechanizmów SQLite nie ma (których to zresztą mechanizmów też nie ma ;) ).

 

Spróbuję kiedyś z prepared statement's.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...