Java PostrgreSQL - baza danych

0

Witam

Utworzyłem bazę danych i chce do niej dodać rekordy ale za pomocą zmiennych tzn. użytkownik podaje z klawiatury np. imię , która jest wczytywana do zmiennej i później dodaję ją za pomocą tej zmiennej. Jak to zrobić ?
Oto kod:

 public static void main(String[] args) {

Connection c = null;
      Statement stmt = null;
      try {
         Class.forName("org.postgresql.Driver");
         c = DriverManager
            .getConnection("jdbc:postgresql://localhost:5432/postgres",
            "postgres", "mojehaslo");
         c.setAutoCommit(false);
         System.out.println("Opened database successfully");

         stmt = c.createStatement();
         String sql = "INSERT INTO ksiazka(id_ksiazki,tytul,autor) "
               + "VALUES (3, 'Alicja w krainie ..', 'Nowy Autor')";
         stmt.executeUpdate(sql);
         
         sql = "INSERT INTO czytelnicy(id_czytelnika,imie,nazwisko,\"PESEL\") "
               + "VALUES (3, 'Euzebiusz', 'Arski',92072508477)";
         stmt.executeUpdate(sql); 
         
         sql = "INSERT INTO wypozyczenia(id_wypozyczenia,id_czytelnika,id_ksiazki) "
               + "VALUES (3, 1, 1);";
         stmt.executeUpdate(sql);

         

         stmt.close();
         c.commit();
         c.close();
      } catch (ClassNotFoundException | SQLException e) {
         System.err.println( e.getClass().getName()+": "+ e.getMessage() );
         System.exit(0);
      }
      System.out.println("Records created successfully");
   } 

Chodzi mi dokładnie o to:

 String sql = "INSERT INTO ksiazka(id_ksiazki,tytul,autor) "
               + "VALUES (3, 'Alicja w krainie ..', 'Nowy Autor')"; 

Jak mamy +VALUES to wpisujemy je ręcznie . Jak zrobić żeby te wartości nie wpisywać ręcznie, tylko wczytać za pomocą zmiennych ? Tj. +VALUES(nazwa zmiennej, nazwa zmiennej) ?

0

Poczytaj o JDBC prepared statements oraz IO (scanner).

0

Przykładowo

String sql = "insert into customer(name,lastname,telephonenumber,address,email) values (?,?,?,?,?)";
		PreparedStatement ps = connection.prepareStatement(sql);
		ps.setString(1, textFieldName.getText());
		ps.setString(2, textFieldLastname.getText());
		ps.setInt(3, Integer.parseInt(textFieldPhoneNumber.getText()));
		ps.setString(4, textFieldAdress.getText());
		ps.setString(5, textFieldEmail.getText());
		
		ps.executeUpdate();
		
		ps.close(); 
0

wyrzuca błąd przy ? : String sql = "INSERT INTO czytelnicy(id_czytelnika,imie,nazwisko,"PESEL") values (?,?,?,?)";
org.postgresql.util.PSQLException: BŁĄD: błąd składni w lub blisko "," Pozycja: 70
jakieś pomysły ?

0

id_czytelnika generuje się samo.

String sql = "insert into czytelnicy (imie,nazwisko,PESEL) values (?,?,?)";
0
IceHeart napisał(a):

id_czytelnika generuje się samo.

String sql = "insert into czytelnicy (imie,nazwisko,PESEL) values (?,?,?)";

Niestety wartość się sama nie uzupełnia i wyrzuca błąd że id_czytelnika nie może być NULL'em

0

Pokaż jak wygląda tabela.

0
CREATE TABLE czytelnicy
(
  id_czytelnika integer NOT NULL,
  imie character varying(20) NOT NULL,
  nazwisko character varying(20) NOT NULL,
  "PESEL" character varying(11) NOT NULL,
  CONSTRAINT "Key1" PRIMARY KEY (id_czytelnika)
) 
0

Zmień typ id_czytelnika na serial.

0

przeszło ale znowu błąd przy ? ten sam tylko że w innym miejscu ... Dokladnie to chyba chodzi o ten PESEL :
String sql = "INSERT INTO czytelnicy(imie,nazwisko,\"PESEL\") values (?,?,?)";
Bo pole PESEL utworzyło mi w cudzysłowach i pewnie tam po prawej się nie zgadza ale jak dam values (?,?,"?") to też wyrzuca błąd że liczba kolumn się nie zgadza ...

0

Spróbuj użyć zamiast

\

tego

'
0

Już sobie poradziłem, wyrzuciłem linijkę:
stmt=c.createStatement();
i teraz działa

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