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

Java JDBC DAO - Insert zamiast nulla daje zero dla PK

0 głosów
69 wizyt
pytanie zadane 20 września 2018 w Java przez konser Nowicjusz (140 p.)

Cześć, jestem zielony, tworze CRUDA w Javie z bazą Oracle. Mam problem z kluczem glownym. W testach na bazie jest cacy - stworzyłem sekwencje i triggera, po dodaniu wiersza z id= null dostaje wiersz z kolejnym numerem. Problem jest w aplikacji.
Aplikacja za każdym razem wpisuje krotke o id = 0 i napisuje ją. Dlaczego ponizsza aplikacja nie działa poprawnie?
Proszę o zerknięcie...

 


//APP

...

public class App {

      public static void main(String[] args) {
         UserDao dao = new UserDao();

         User user = new User();

            Scanner firstNameSc = new Scanner( System.in );
            System.out.println("Please enter new User first name:");
            String firstName = firstNameSc.nextLine();

            Scanner lastNameSc = new Scanner( System.in );
            System.out.println("Last name:");
            String lastName = lastNameSc.nextLine();

         user.setFirstName(firstName);
         user.setLastName(lastName);

            Scanner dataSc = new Scanner( System.in );
            System.out.println("Date of birth (yyyy-mm-dd):");
            String data = dataSc.nextLine();


            try{
            Date dob = new SimpleDateFormat("yyyy-MM-dd"). parse(data);
            user.setDob(dob);
         } catch (ParseException e) {
            e.printStackTrace();
         }


            Scanner emailSc = new Scanner( System.in );
            System.out.println("Enter email:");
            String email = emailSc.nextLine();

         user.setEmail(email);
         dao.updateUser(user);

         ...



//USERDAO.JAVA
...

public class UserDao {

   private Connection connection;

   public UserDao() {
      connection = DbUtil.getConnection();
   }

   public void addUser(User user) {
      try {


         PreparedStatement preparedStatement = connection
               .prepareStatement("insert into users(firstname,lastname,dob,email) values ( ?, ?, ?, ? )");
         // Parameters start with 1
         //insert into ruff(id,name) values(your_sequence.nextval,'name') USERSID_SEQ.NEXTVAL

         // preparedStatement.setInt(1, user.getUserid());
         //preparedStatement.setNull(1, java.sql.Types.INTEGER);
         preparedStatement.setString(1, user.getFirstName());
         preparedStatement.setString(2, user.getLastName());
         preparedStatement.setDate(3, new java.sql.Date(user.getDob().getTime()));
         preparedStatement.setString(4, user.getEmail());
         preparedStatement.executeUpdate();


      } catch (SQLException e) {
         e.printStackTrace();
      }
   }


   public void updateUser(User user) {
      try {
         PreparedStatement preparedStatement = connection
               .prepareStatement("update users set firstname=?, lastname=?, dob=?, email=?" +
                     "where userid=?");
         // Parameters start with 1
         preparedStatement.setString(1, user.getFirstName());
         preparedStatement.setString(2, user.getLastName());
         preparedStatement.setDate(3, new java.sql.Date(user.getDob().getTime()));
         preparedStatement.setString(4, user.getEmail());
         //preparedStatement.setInt(5, user.getUserid());
         preparedStatement.executeUpdate();

      } catch (SQLException e) {
         e.printStackTrace();
      }
   }

...
//user.JAVA

public class User {

   private int userid;
   private String firstName;
   private String lastName;
   private Date dob;
   private String email;
   public int getUserid() {
      return userid;
   }
   public void setUserid(int userid) {
      this.userid = userid;
   }
   public String getFirstName() {
      return firstName;
   }
   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }
   public String getLastName() {
      return lastName;
   }
   public void setLastName(String lastName) {
      this.lastName = lastName;
   }
   public Date getDob() {
      return dob;
   }
   public void setDob(Date dob) {
      this.dob = dob;
   }
   public String getEmail() {
      return email;
   }
   public void setEmail(String email) {
      this.email = email;
   }
   @Override
   public String toString() {
      return "User [userid=" + userid + ", firstName=" + firstName
            + ", lastName=" + lastName + ", dob=" + dob + ", email="
            + email + "]";
   }


}

 

2 odpowiedzi

+2 głosów
odpowiedź 20 września 2018 przez Aisekai Nałogowiec (36,700 p.)
Skąd przypuszczenie, że niezainicjowany "mały" int może być nullem? Jakikolwiek typ prosty nigdy nie będzie nullem.

https://stackoverflow.com/questions/11047276/null-for-primitive-data-types

Natomiast niezainicjowany typ prosty ma swoje defaultowe wartości, dla małego inta to 0.
komentarz 21 września 2018 przez Wiciorny Maniak (66,480 p.)
Po drugie : 0 -> to nie null, jakby wartość była null to w bazie byłoby null ew. NULL pointer poleci.

Ale na prymitywach - > brak wartości to często adres  śmieci,  co przełożenie ma na wartość nieznaną -> zapisanaą np w bazie jako 0 ... coś na bazie "undefined"
0 głosów
odpowiedź 21 września 2018 przez Wiciorny Maniak (66,480 p.)

po dodaniu wiersza z id= null dostaje wiersz z kolejnym numerem. Problem jest w aplikacji. 

a jaki jest schemat bazy ? Oracle- MYSQL domyślnie może mieć kolumne id Auto-increment, więc automatycznie bedzie Ci generować klucze stąd mimo usuwania/dodawania bez  drop base .... będziesz miał ciągle incrementowany klucz  

Podobne pytania

0 głosów
2 odpowiedzi 88 wizyt
pytanie zadane 4 października 2018 w Java przez konser Nowicjusz (140 p.)
0 głosów
1 odpowiedź 1,101 wizyt
pytanie zadane 28 września 2018 w Java przez pomaraqcz Początkujący (380 p.)
0 głosów
1 odpowiedź 25 wizyt
pytanie zadane 3 czerwca 2018 w Java przez Adrian Paź Obywatel (1,270 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

66,320 zapytań

113,057 odpowiedzi

239,193 komentarzy

46,585 pasjonatów

Przeglądających: 174
Pasjonatów: 2 Gości: 172

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...