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