Zapytania SQL odwołujące się do poszczególnych tabel bazy danych.

0

Witam, mam oto taki kawałek kodu mojego całego projektu.

    private boolean updateTableAutorzy(int IdAutora, String Imie, String Nazwisko) {
        String command = 
                "UPDATE AUTORZY "
                + "SET ID_AUTORA=?, "
                + "IMIE=?, "
                + "NAZWISKO=? "
                + "WHERE ID_AUTORA=" +IdAutora+ ";";
        try {
            PreparedStatement pstmt = conn.prepareStatement(command);
            pstmt.setInt(1, IdAutora);
            pstmt.setString(2, Imie);
            pstmt.setString(3, Nazwisko);
            pstmt.execute();
            return true;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Wystąpił błąd podczas aktualizacji danych." + ex);
            return false;
        }

    }

    private boolean updateTableKsiazki(String isbn, String Tytul, String Wydawnictwo, int Rok, String Opis) {
        String command
                = "UPDATE KSIAZKI "
                + "SET ISBN=?, "
                + "TYTUL=?, "
                + "WYDAWNICTWO=?, "
                + "ROK=?, "
                + "OPIS=? "
                + "WHERE ISBN='" + isbn + "';";
        try {
            PreparedStatement pstmt = conn.prepareStatement(command);
            pstmt.setString(1, isbn);
            pstmt.setString(2, Tytul);
            pstmt.setString(3, Wydawnictwo);
            pstmt.setInt(4, Rok);
            pstmt.setString(5, Opis);
            pstmt.execute();
            return true;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Wystąpił błąd podczas aktualizacji danych." + ex);
            return false;
        }

    }

    private boolean updateTablePowiazania(String staryISBN, String isbn, int IdAutora) {
        String command
                = "UPDATE KSIAZKI_AUTORZY "
                + "ISBN=?, "
                + "ID_AUTORA=? "
                + "WHERE ISBN='" + staryISBN + "';";
        try {
            PreparedStatement pstmt = conn.prepareStatement(command);

            pstmt.setInt(1, IdAutora);
            pstmt.setString(2, isbn);
            pstmt.execute();
            return true;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Wystąpił błąd podczas aktualizacji danych." + ex);
            return false;
        }
    }

    public boolean updateWszystko(String staryISBN, String isbn, int IdAutora, String Imie, String Nazwisko, String Tytul, String Wydawnictwo, int Rok, String Opis) {
try{
        updateTableAutorzy(IdAutora, Imie, Nazwisko);
        updateTableKsiazki(isbn, Tytul, Wydawnictwo, Rok, Opis);
        updateTablePowiazania(staryISBN, isbn, IdAutora);
 return true;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Wystąpił błąd podczas aktualizacji danych." + ex);
            return false;
        }
    }

I chciałbym się dowiedzieć jak poprawnie sformułować zapytania SQL, ten fragment kodu odpowiedzialny jest za Aktualizację danych w bazie danych SQL, podczas gdy sypie mi Errorami przy naciśnięciu przycisku "Zapisz"

oto screeny tych błędów(wszystko w swingu).

http://img812.imageshack.us/img812/9272/2aff.jpg
takie okienka wyskakują 3x (UpdateTableAutorzy, UpdateTableKsiazki, UpdateTablePowiazania) do każdej metody po jednym błędzie. ino zmienia się "column 20" "column 23" "column 28"

Potrzebuję pomocy, sprawdzeniu poprawności działania tych zapytań do Bazy SQL

0

MAM!!! Dopiero teraz zauważyłem!!!

W SQLkach kończysz je podając znak ;, a w JDBC to jest błąd ponieważ sterownik sam dodaje odpowiedni znak końca polecenia. Usuń wszystkie ; ze stringów z SQLkami i zamień warunki tak jak napisałem w komentarzu

0

Zmieniłem warunki tak jak pisałeś

 private boolean updateTablePowiazania(String staryISBN, String isbn, int IdAutora) {
        String command
                = "UPDATE KSIAZKI_AUTORZY "
                + "SET ISBN=?, "
                + "ID_AUTORA=? "
                + "WHERE ISBN=?";

i wyświetla komunikat:
http://img10.imageshack.us/img10/604/u0au.png

Ale, jak zmieniłem z powrotem na:

private boolean updateTablePowiazania(String staryISBN, String isbn, int IdAutora) {
        String command
                = "UPDATE KSIAZKI_AUTORZY "
                + "SET ISBN=?, "
                + "ID_AUTORA=? "
                + "WHERE ISBN=?'"+ staryISBN+ "';";

To działa bo problem miałem tylko i wyłącznie z tym SET ISBN, zapomniałem ustawić seta.

Tylko mam teraz dalej z tym problem. Bo gdy w swoim programie wcisnę, po edycji, zapisz to zapisuje mi do Bazy Danych w IBeasy+, naciskam odśwież w moim GUI i nie pokazuje edytowanej pozycji, nic sie nie zmienia.

Drugi problem to w iBeasy edytuje mi tylko tabele Ksiazki(tu podmienia stary na nowy), a mam jeszcze tabele Autorzy i Ksiazki_Autorzy, w których nic się nie zmienia, gdzieś dalej siedzi byk w poprzednich zapytaniach.

0

Dobrze, ale czy ustawiasz parametr ISBN?

Czy wywołujesz też resztę zapytań?

0

Tak ustawiam:

private boolean updateTablePowiazania(String staryISBN, String isbn, int IdAutora) {
        String command
                = "UPDATE KSIAZKI_AUTORZY "
                + "SET ISBN=?, "
                + "ID_AUTORA=? "
                + "WHERE ISBN=?'"+ staryISBN+ "';";
        
        //
        try {
            PreparedStatement pstmt = conn.prepareStatement(command);

            pstmt.setString(1, isbn);
            pstmt.setInt(2, IdAutora);
            pstmt.execute();
            return true;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Wystąpił błąd podczas aktualizacji danych Powiazania." + ex);
            return false;
        }
public boolean updateWszystko(String staryISBN, String isbn, int IdAutora, String Imie, String Nazwisko, String Tytul, String Wydawnictwo, int Rok, String Opis) {
        try {
            updateTableAutorzy(IdAutora, Imie, Nazwisko);
            updateTableKsiazki(isbn, Tytul, Wydawnictwo, Rok, Opis);
            updateTablePowiazania(staryISBN, isbn, IdAutora);
            return true;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Wystąpił błąd podczas aktualizacji danych wszystko." + ex);
            return false;
        }
    }
 @Override
    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("Zapisz")) {
            String stareNazwiskoAutora
                    = (String) jCBAutor.getSelectedItem();
            CommunicationDB cdb = new CommunicationDB();

            boolean changded = cdb.updateWszystko(staryISBN, jtFISBN.getText(), IdAutora, jTFImie.getText(), jTFNazwisko.getText(), jtFTytul.getText(), jtFWydawnictwo.getText(), Integer.parseInt(jtfRok.getText()), jtFOpis.getText());
            if (changded == true) {
             lInformation.setText("Zapisz zmiany.");
             jTFImie.setText("");
             jTFNazwisko.setText("");
             jtFISBN.setText("");
             jtFTytul.setText("");
             jtfRok.setText("");
             jtFWydawnictwo.setText("");
             jtFOpis.setText("");

Takie cuda na kiju mam. Dalej stoje w tym samym punkcie ;/

0

w którym miejscu dokładnie?

0

pstmt.setInt(3,staryISBN); - W zapytaniu zostaw sam znak zapytania

0

Pojawił się problem, że nie może przekonwertować ISBN na inta. Zaraz wymóżdżę w który miejscu jest brany ISBN jako int, on jest typu String :P

I to nie chodzi o:
pstmt.setInt(3,staryISBN); - W zapytaniu zostaw sam znak zapytania
pstmt.setString(3,staryISBN);, bo to poprawiłem, ale błąd leży gdzie indziej.

Tfu, czepia się ISBN a nie staryISBN. Hmm?

0

Znalazłem winowajcę, ale teraz mam inny problem. Błędu nie wyrzuca, zmieniam w TextFieldach dane: np imie z Jan na Bartosz. daje zapisz. odświeżam tabelę danych, rekord znika. Otwieram IBeasy+ a tam bez zmian. Gdzie leży problem ?

0

Ale przestój :D męczę to od wczoraj i bez efektu......

0

Dobra, update działa. :D poradziłem sobie jakoś.

Teraz mam coś takiego.

    public boolean usunKsiazke(String isbn) {
        String komendaSQL
                = "DELETE FROM "
                + "KSIAZKI "
                + "WHERE ISBN like '" + isbn + "'";
        try {
            PreparedStatement pstmt = conn.prepareStatement(komendaSQL);
            pstmt.executeUpdate();
            return true;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Wystąpił błąd podczas usuwania książki." + ex);
            return false;
        }
    }

    public boolean usunAutora(String imie, String nazwisko) {
        String komendaSQL
                = "DELETE FROM "
                + "AUTORZY "
                + "WHERE IMIE like '" + imie + "' and NAZWISKO like '" + nazwisko + "'";
        try {
            PreparedStatement pstmt = conn.prepareStatement(komendaSQL);
            pstmt.executeUpdate();
            return true;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Wystąpił błąd podczas usuwania książki." + ex);
            return false;

        }
    }

    public boolean usunKsiazki_autorzy(String isbn) {
        String komendaSQL
                = "DELETE FROM "
                + "KSIAZKI_AUTORZY "
                + "WHERE ISBN like '" + isbn + "'";
        try {
            PreparedStatement pstmt = conn.prepareStatement(komendaSQL);
            pstmt.executeUpdate();
            return true;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Wystąpił błąd podczas usuwania książki." + ex);
            return false;

        }
    }
}
   @Override
    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("Zapisz")) {
            String stareNazwiskoAutora
                    = (String) jCBAutor.getSelectedItem();
            CommunicationDB cdb = new CommunicationDB();
            cdb.updateBook(jtFISBN.getText(), jtFTytul.getText(), jtFWydawnictwo.getText(), Integer.parseInt(jtfRok.getText()), jtFOpis.getText(), oldLastName); 
            cdb.updateAuthor(oldLastName, jTFImie.getText(), jTFNazwisko.getText());

            // pobranie id ostatniego w bazie, zwiekszanie o jeden i przypisanie do IdAutora
            IdAutora = cdb.checkAuthorID(jTFNazwisko.getText());
            if (IdAutora == 0) {
                int tempID = cdb.loadMaxID();
                tempID += 1;
                cdb.usunKsiazki_autorzy(jtFISBN.getText());
                cdb.wstawPowiazanie(jtFISBN.getText(), tempID);
            } else {
                cdb.wstawPowiazanie(jtFISBN.getText(), IdAutora);
            }
            JOptionPane.showMessageDialog(null, "Aby odświeżyć tabelę przyciśnij przycisk 'Pokaż'");

            boolean changded;
        }
    }

Usuwanie autora działa, książki działa. Lecz nie usuwa mi z tabeli KSIAZKI_AUTORZY isbnu i id_autora tylko tworzy książkę o takim samym id po edycji.
Screen to przedstawia:
http://img28.imageshack.us/img28/9163/nory.jpg
ID_Autora <-- 10 mam 2x
Coś na pewno mam nie tak z zapytaniem usunKsiazki_autorzy(), kombinowałem i nadal nie mogę sobie poradzić z tym błędem.
Proszę o wskazówki :) dzięki

0

dobra znalazłem winowajcę, temat do zamknięcia. Dzięki za pomoc wszystkim pomocnikom :) Pozdrawiam do następnego :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1