Prosta baza danych w javie

0

Witam,
mam pewien problem ze stworzeniem bazy danych w javie, a w zasadzie przetlumaczeniem swojego programu z C++ ;).
Mam klase Dane, gdzie mam takie pola jak imie, nazwisko, adres, nr telefonu oraz funkcje pozwalajace zmieniac i czytac te pola. W mainie tworze obiekt typu Dane, ustawiam parametry obiektu i chce go dodac do listy LinkedList().
Tu nastepuje zonk. Gdy wpisuje lista.add(oDane) niby wszystko wyglada dobrze, ale gdy wyswietlam zawartosc listy, wypisuje mi Dane@1f6a7b9 zamiast poszczegolnych pol. Rozumie, ze LinkedList() nie sluzy do dodawania obiektow, albo ja robie cos nie tak ;). Czy ktos mi moze powiedziec jaka funkcja pozwoli mi dodawac obiekty mojej klasy, bo jak widac ja jestem w tym zielony.
Z gory dziekuje za odpowiedzi :)

0

@koru, wszystko jest dobrze. Napis Dane@1f6a7b9 oznacza identyfikator obiektu w systemie. Jeżeli chcesz wypisać zawartość pól obiektu nalezy przeładować metodę toString:

public class Dane{
   String pole1;
   String pole2;
   // inne pola i metody

  public String toString(){
      return "pole1: "this.pole1+"| pole2: "+pole2;
  }
}

LinkedList służy do przechowywania obiektów w postaci listy wiązanej dwu lub jedno kierunkowej :)

0

Dzieki, dziala :). Tylko jest jeszcze jeden problem. Powiedzmy utworze 5 obiektow i dodam je do listy. Jak uzyskac dostep np. do pola nazwisko w drugim elemencie listy? Wpisujac lista.get(1) wypisuje mi teraz wszystko.
Powoli sie przekonuje do tej javy, fajnie sa rozwiazane te listy :D.
Z gory dziekuje za odpowiedz.

0

Jak masz obiekt to możesz dla jego pól napisać metody ustawiające i zwracające typu get i set;

public class Dane{
private String pole1;
///
public String getPole1(){
  return this.pole1
}

public void setPole1(String pole1){
  this.pole1= pole1;
}
}
0

Koru

0

Tak wlasnie robie. Nie mam problemu zeby dostac sie do obiektu, tylko do obiektu zapisanego w ArrayList(). Przykladowo, mam 5 obiektow. Gdy chce wypisac wszystkie elementy listy, wypisuje System.out.println(lista);. Gdy chce wypisac jeden obiekt listy uzywam System.out.println(lista.get(i);, gdzie i jest indeksem listy. Ale powiedzmy, ze potrzebuje tylko wypisac pole nazwisko z pojedynczego elementu listy. System.out.println(lista.get(i).getNazwisko(); niestety nie dziala ;).
Z gory dziekuje za odpowiedz

0

niemozliwe! musi dzialac. jaki masz blad?

pozdrawiam

0

mozliwe, choc baaaardzo malo prawdopodobne, ze musisz miec zadeklarowaną listę konkretnych obiektów:
List<Nazwa_Twojej_Klasy> list;
ale takie udziwnienia potrzebne mi były w sumie tylko np. przy pisaniu jakiegoś klienta WebServices, przejrzyj jeszcze raz uważnie kod...

i zapodaj błąd jaki Ci się pokazuje

0

Błąd:

343: cannot find symbol
symbol  : method getNazwa()
location: class java.lang.Object
            System.out.println(aLista.get(0).getNazwa());

metoda getNazwa() z klasy Dane:

   public String getNazwa()
    {
        return Nazwa;
    }

aLista jest LinkedList i dodaje do niej w ten sposob: aLista.add(dane), gdzie dane jest typu Dane (wczesniej ustawiam pola za pomoca dane.setNazwa()).

0

przy okazji - jesli uzywasz "get" to NIE uzywaj LinkedListy tylko ArrayListy!!! Linked powinno sie uzywac TYLKO gdy pobierasz getFirst() lub przechodzisz liste iteratorem!

pozdrawiam

0

czyli masz dokładnie to o czym powiedziałem, zrób tak:
przy deklaracji tej listy zastosuj 'jawną deklarację' tzn. że ma być to lista dokładnie obiektów typu Dane, bo w przeciwnym wypadku zrobi on listę obiektów typu Object, należy wtedy przed każdym dostępem do listy 'powiedzieć kompilatorowi, że chodzi nam o konkretną klasę i stosuje się jawne rzutowanie '.

(Dane)(aLista.get(i)).getNazwisko();

ja proponuję jednak coś takiego:
przy deklaracji listy:

ArrayList<Dane> aLista = new ArrayList<Dane>();

wówczas wiadomo, że jest to lista obiektów Dane, i wszystko powinno działać już bez rzutowaia...

pzdr.

0

Ech... moj blad (wybaczcie, nie spalem przez ten program ;p). aList jest ArrayLista...

0

ArrayList<Dane> aLista = new ArrayList<Dane>(); rozwiazalo problem, wiec rzutowania nawet nie sprawdzalem.
Odpowiedz przyszla szybciej niz zdazylem zauwazyc wlasny blad, bardzo dziekuje :D

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