Witam,
Do czego najlepiej zrzucać dane pobrane selectem z tablicy ? Mam tabelkę Pracownicy i chcę wyciągnąć ID, Imie, Nazwisko itp. Jak zrzucić kilka rekordów z bazy do jakiejś tabelki, najlepiej "asocjacyjnej", gdzie będę mógł podać nazwę klucza ?
Czuje rozwiązanie z PHP... Jak masz ResultSet to najlepiej mapować go na obiekt. To oznacza, że musisz zrobić coś w stylu:
List<Person> persons = new LinkedList<Person>();
while(resultSet.next){
persons.add(new Person(resultSet.getInt("id"), resultSet.getString("name")));
}
Wcześniej zrobiłem coś takiego:
int i = 1;
Map mapka = new HashMap();
Map mapka_2 = new HashMap();
while (rs.next()) {
mapka.clear();
mapka.put("Id", rs.getInt("id_pracownik"));
mapka.put("Nazwisko", rs.getString("Nazwisko"));
mapka_2.put(i, mapka);
i++;
}
Z zamyśle miało to być tak:
Odczytuję dane z wiersza (Id,Imie,Nazwisko itp) i zrzucam to do tabeli, gdzie mam zbiorczy wynik zapytania, np. mam 30 wierszy z selecta:
{
[1] => {[Id]=> 1,[Imie]=> Adam,[Nazwisko]=> Nowak },
[2] => {[Id]=> 3,[Imie]=> Stefan,[Nazwisko]=> Karwowski}
}
Wszystko jest ok do momentu wrzucania mapka do mapka_2. W mapka_2 mam wszystkie jednakowe wpisy
{
[1] => {[Id]=> 3,[Imie]=> Stefan,[Nazwisko]=> Karwowski},
[2] => {[Id]=> 3,[Imie]=> Stefan,[Nazwisko]=> Karwowski}
}
Czyli chciałem zrobić w stylu zrzucania danych w PHP, tablica z kluczami i w niej dane.
a tak z ciekawosci, po co ?
kwestia przyzwyczajenia z php ? :) czemu nie uzyjesz listy z obiektami reprezentujacymi rekordy ?
A błąd wynika z tego, że cały czas działasz na tej samej referencji mapka.
Dobra zrobiłem coś takiego:
Pracownicy, odpowiadającą za graficzną prezentację danych pobranych z bazy
Baza szukanie = new Baza();
.....
LinkedList dane_wyszukiwania = szukanie.szukaj_pracownik_lista(Pole_Imie.getText(),Pole_Nazwisko.getText());
Mam plik Baza, odpowiedzialny za komunikacje z bazą sqlite
public static LinkedList szukaj_pracownik_lista(String imie, String nazwisko) throws Exception{
LinkedList<Person> osobniki = new LinkedList<Person>();
ResultSet rs = stat.executeQuery("select * from Pracownik where "
+ "Imie like '%"+imie+"%' and Nazwisko like '%"+nazwisko+"%' ;");
while(rs.next()){
osobniki.add(new Person(rs.getInt("id_pracownik"),
rs.getString("Imie"), rs.getString("Nazwisko"),
rs.getString("Stanowisko"), rs.getString("Data_urodz")));
}
return osobniki;
}
W pliku Baza mam dostęp do danych "osobniki" i mogę sobie wyświetlić
JOptionPane.showMessageDialog(null, osobniki.getFirst().nazwisko);
i mam dostęp bezpośrednio do nazwiska
A teraz jak z pliku Praownicy dostać się do tego ?
JOptionPane.showMessageDialog(rootPane, dane_wyszukiwania.);
I co dopisać po ".", żeby mieć dostęp do nazwiska ? :)
Jak wpiszę bez . to mi wyrzuca ..Person@jakies_numerki_i_cyfry
Troche zgaduje, na czym moze polegac problem, ale wydaje mi sie rozwiazaniem bedzie rzutowanie:
JOptionPane.showMessageDialog(rootPane, ((Person)dane_wyszukiwania.getFirst()).nazwisko);
lub zdefiniowanie, by ten LinkedList przechowywal tylko konkretny typ danych:
LinkedList<Person> dane_wyszukiwania = ...
Podziałało
LinkedList<Person> dane_wyszukiwania =
:)