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

setAutoCommit(false) i baza MySQL

Object Storage Arubacloud
0 głosów
182 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ź 112 wizyt
pytanie zadane 8 maja 2020 w Java przez warior1 Użytkownik (520 p.)
0 głosów
1 odpowiedź 547 wizyt
pytanie zadane 5 sierpnia 2020 w Java przez Szyszka Gaduła (3,490 p.)
0 głosów
2 odpowiedzi 240 wizyt
pytanie zadane 5 lipca 2018 w Java przez must Bywalec (2,980 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...