Dodawanie obiektów do ArrayList z bazy danych

0

Witam

	ArrayList<Punkt> punkt = new ArrayList<Punkt>();
		int id, idStrefa;
		float x, y;
		String nazwa;
		
		while(krotka.next()){			
			id = krotka.getInt("Id");
			nazwa = krotka.getString("Nazwa");
			x = krotka.getFloat("X");
			y = krotka.getFloat("Y");
			idStrefa = krotka.getInt("IdStrefa");
			punkt.add( new Punkt(id, nazwa, x, y, idStrefa));
					} 

Zapytanie do bazy danych wygląda prosto - SELECT * FROM Punkt WHERE Id = 1 OR Id = 2.
Wynikiem powyższego kodu jest dwuelementowa ArrayList, jednak na obydwu pozycjach jest to samo ( o Id = 2) a oczekiwał bym dwóch krotek z bazy danych o Id = 1 i o Id = 2. Nie mam pomysłu dlaczego tak się nie dzieje. Proszę o sugestie.

0

Niemożliwe. Sprawdź co ci baza zwraca przy takim zapytaniu.

0

Pokaż jeszcze kod, który Cię przekonał, że obie pozycje w ArrayList punkt są identyczne.
Btw, nazwa punkt jest dość dziwna, dlaczego nie punkty?

0

Baza zwraca dwa rekordy na zapytanie bezpośrednio.

Ale po wykonaniu kodu :

		ArrayList<Punkt> punkt = new ArrayList<Punkt>();
		int id, idStrefa, i = 0;
		float x, y;
		String nazwa;
		
		while(krotka.next()){			
			id = krotka.getInt("Id");
			nazwa = krotka.getString("Nazwa");
			System.out.println("nazwa z pętli - " + nazwa);
			x = krotka.getFloat("X");
			y = krotka.getFloat("Y");
			idStrefa = krotka.getInt("IdStrefa");
			punkt.add( new Punkt(id, nazwa, x, y, idStrefa));
			i++;
		}
		System.out.println("Rozmiar tablicy - " + punkt.size());
		System.out.println("punkt 0 - " + punkt.get(0).getNazwa());
		System.out.println("punkt 1 - " + punkt.get(1).getNazwa()); 

dostaję w konsoli:

nazwa z pętli - Trocka
nazwa z pętli - Blokowa
Rozmiar tablicy - 2
punkt 0 - Blokowa
punkt 1 - Blokowa

Może rzeczywiście "punkty" było by trafniej ale to tylko nazwy.

0

Pokaż jeszcze kod klasy Punkt, czy przypadkiem pole nazwa nie jest static?

0

Rzeczywiście jest, a raczej już było.

Czy wytłumaczenie iż "Modyfikator static oznacza iż pole obiektu ma taką samą wartość dla wszystkich obiektów danej klasy" jest poprawne do tej sytuacji?

Mniemałem że eclipse zwróci mi jakieś ostrzeżenie, ale nie zrobił tego.

Dziękuje. Teraz działa tak jak oczekiwałem.
Pozdrawiam.

0

Pole statyczne to pole KLASY a nie obiektu. Jest JEDNO dla KLASY, więc jest wspólne dla wszystkich obiektów tej klasy. Czemu eclipse miałby ci zwrócić jakieś ostrzeżenie? Przeciez pola statyczne to są normalne rzeczy, których sie używa. Eclipse nie będzie za ciebie myślał.

0

Oki
Myślał, nie myślał - kiedyś trzeba się nauczyć i ja właśnie się uczę.

Jeżeli opatrzę zmienną klasy jako static to wszystkie stworzone jej obiekty będą się odwoływać do tego samego miejsca w pamięci jeżeli będziemy chcieli odczytać tą zmienną?
To w moim przypadku stworzony ostatni obiekt "Punkt" zmieniał tą zmienną i wszystkie obiekty "Punkt" w tablicy "punkt" miały taką samą wartość tej zmiennej.

Jeszcze raz dzięki.

0

Jeżeli opatrzę zmienną klasy jako static to wszystkie stworzone jej obiekty będą się odwoływać do tego samego miejsca w pamięci jeżeli będziemy chcieli odczytać tą zmienną?

Tak.

To w moim przypadku stworzony ostatni obiekt "Punkt" zmieniał tą zmienną i wszystkie obiekty "Punkt" w tablicy "punkt" miały taką samą wartość tej zmiennej.

Nie. Wszystkie odnosiły się do jednej i tej samej zmiennej. Żebyś czasem nie myslał że każdy obiekt ma "swoją" zmienną tylko że wartości są jakoś zsynchronizowane - tak nie jest. Zmienna jest jedna na klase.

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