Postgres Java BŁĄD: brakująca klauzula FROM dla tabeli

0

Witam wszystkich,

właśnie jestem na etapie pisania aplikacji bazodanowej i natrafiłem na 1 problem z insertem.
Baza danych jest postawiona na postgresie, znajduje sie tam tabela klienci. Primary key to id_klienta -id powinno byc autoinkrementowane - w tym celu stworzyłem sekwencję zwaną idklienta_seq (sekwencja polega na wywolaniu metody nextval()).

Po uruchomieniu programu dostaje

org.postgresql.util.PSQLException: BŁĄD: brakująca klauzula FROM dla tabeli "idklienta"
Pozycja: 121
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:386)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:379)
at bazaDanych.KlientDB.insert(KlientDB.java:153)
at bazaDanych.Testowa.main(Testowa.java:50)

Fragment kodu o który chodzi to:

public void insert (Klient k){
        Connection conn  = null; 
        PreparedStatement pst = null;

        try{
            Class.forName("org.postgresql.Driver");
            conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Projekt", "postgres", "qwe");
            pst = conn.prepareStatement("INSERT INTO klient( id_klienta, imie, nazwisko, adres, pesel, " +
                    "nr_rach_bankowego, id_firmy, rabat, adres_email)  VALUES (idklienta.seq, ?, ?, ?, ?, ?, ?, ?, ?)");

            //pst.setInt(1, k.getId());
            pst.setString(1, k.getImie());
            pst.setString(2, k.getNazwisko());
            pst.setString(3, k.getAdres());
            pst.setString(4, k.getPESEL());
            pst.setString(5, k.getNr_Bankowy());
            pst.setInt(6, k.getId_firmy());
            pst.setInt(7, k.getRabat());
            pst.setString(8, k.getAdres_email());
            pst.execute();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(pst!=null){
                try{
                    pst.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }

            if(conn!=null){
                try{
                    conn.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }

    }

A tu klasa uruchamiajaca:

public class Testowa {

    public static void main(String[] args) {

        KlientDB kl = new KlientDB();

        Klient k = new Klient();

        //k.setId(5);
        k.setImie("Aejos1");
        k.setNazwisko("Najmana");
        k.setAdres("Pyskowa");
        k.setAdres_email("[email protected]");
        k.setId_firmy(5);
        k.setNr_Bankowy("12322344");
        k.setPESEL("99023323064");
        k.setRabat(10);
        kl.insert(k);

    }
}

Dodam, że Eclispe zwraca błąd w miejscu pst.execute();

Jakies pomysły, co jest nie tak?

0

A skąd ma postgres wiedziec co to jest to twoje idklienta? :-)

Powinieneś tam użyć nextval('idklienta_seq ') jeśli twoja sekwencja nazywa się idklienta_seq.

1

W celu autoinkrementowania możesz założyć typ serial dla id_klienta, a w zapytaniu SQL pomijać w ogóle tą wartość.

0

Dzieki bardzo za pomoc. nextval('idklienta_seq ') to prawidłowe rozwiązanie:)

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