• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

setAutoCommit(false) i baza MySQL

VPS Starter Arubacloud
0 głosów
172 wizyt
pytanie zadane 16 listopada 2017 w Java przez cyberDEV Użytkownik (780 p.)

Mam bazę MySQL postawioną w XAMPP oraz prosty program, który usuwa podany rekord z bazy. Powiedzmy, że jest to część tej metody

public void removeRow(int id) {
    // ...
    // fragment metody:
    stmt.executeUpdate("DELETE FROM cars WHERE id = " + id);
    // ...
}

Po wykonaniu programu nie widać zmian w bazie danych jednak, gdy zrobię transakcję "ręcznie" to wszystko działa i zmiana jest widoczna natychmiastowo.

public void removeRow(int id) {
    // ...
    // fragment metody:
    con.setAutoCommit(false);
    stmt.executeUpdate("DELETE FROM cars WHERE id = " + id);
    con.commit();
    // ...
}

O co chodzi? Można zrobić tak, aby nie była konieczność ręcznego robienia transakcji?

1 odpowiedź

+1 głos
odpowiedź 16 listopada 2017 przez Tomasz90 Nałogowiec (25,140 p.)
Domyślnie tryb auto-commit jest włączony i polega on na tym, ze każde zapytanie wykonywane jest jako osobna transakcja. Czasem jednak nie chcesz, by tak było bo może to prowadzić do niespójności danych. Dlatego istnieje możliwość wyłączenia go i ręcznego wykonywania kilku operacji w jednej transakcji. Na pewno w tej pierwszej metodzie nie masz wyłączonego auto-commita? Bo powinny być widoczne wyniki zapytania od razu
komentarz 16 listopada 2017 przez cyberDEV Użytkownik (780 p.)
W tej metodzie nie mam aczkolwiek nie wiem czy w innym miejscu nie jest on ustawiany. Powiedzmy jeśli będzie wyłączony auto-commit wtedy muszę za każdym razem samemu ręcznie wykonywać commit?
komentarz 16 listopada 2017 przez Tomasz90 Nałogowiec (25,140 p.)
Tak. ale doczytałem później, na innym forum, że zachowanie odnośnie auto-commitu jest zależne od danej bazy i że MySQL w momencie rozpoczęcia transakcji wyłącza i tak tryb-autocommit.
komentarz 16 listopada 2017 przez mbabane Szeryf (79,280 p.)
Sprawdź na daty tych postów, bo jak ostatnio (w wakacje tego roku) używałem MySQL to nawet nie wiedziałem o istnieniu tego o czym jest ten watek i wszystko śmigało bez użycia connection.commit().
komentarz 16 listopada 2017 przez Tomasz90 Nałogowiec (25,140 p.)
Możliwe. Ja MySQL nie używam na co dzień, coś raz tylko w jakimś prostym projekcie na studiach robiłem. W każdym razie nigdy nie musiałem ręcznie robić commita transakcji w JDBC i normalnie działało.

Podobne pytania

0 głosów
1 odpowiedź 106 wizyt
pytanie zadane 8 maja 2020 w Java przez warior1 Użytkownik (520 p.)
0 głosów
1 odpowiedź 531 wizyt
pytanie zadane 5 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 p.)
0 głosów
2 odpowiedzi 234 wizyt
pytanie zadane 5 lipca 2018 w Java przez must Bywalec (2,980 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...