Java problem z rzutowaniem

0

Hej!
Mam do napisania body method w Javie na projekt na studia. Mam klasę DB która jest odpowiedzialna za łączenie się z bazą danych (mssql) i w niej funkcję:

public List<Object[]> Select(String sel)
	{
		ResultSet rset;
		List<Object[]> lista = new ArrayList<Object[]>();
		try
		{
			Statement stmt = con.createStatement();
			rset = stmt.executeQuery(sel);
			ResultSetMetaData meta = rset.getMetaData();
			int numCol = meta.getColumnCount();
			while (rset.next())
			{
				Object[] tupla = new Object[numCol];
				for(int i=0; i<numCol;++i)
				{

					tupla[i] = rset.getObject(i+1);
				}
				lista.add(tupla);


			}
			rset.close();
			stmt.close();
		}
		catch (SQLException ex)
		{
			throw new Error("Error en el SELECT: " + sel+ ". " + ex.getMessage());
		}		
		
		return lista;
	}

Oraz klasę Usuario (zajęcia w języku hiszpańskim, dont judge) z metodą:

public static List<Usuario> ListaUsuarios()
	{
        BD bd = new BD(BD_SERVER, BD_NAME);
        List<Object[]> var = bd.Select("SELECT * FROM tUsuario;");
        List<Usuario> myList = new ArrayList<>();;
        //tutaj próbowałem rzutowania ale mi nie wychodziło nic :c

        

		return myList;
	}

Potrzebuje listę z pierwszej metody przenieść do listy w drugiej metodzie, niestety nie działa żadne rzutowanie ani nic z tych rzeczy ( bądź robię to źle). Może ktoś pomóc? Chodzi o to aby lista użytkowników (Usuarios) pobrana z bazy danych w klasie DB była zwracana w metodzie ListaUsuarios().

0

WTF? Jak ty to chciałes rzutować? Robisz dziwne rzeczy, zamiast wybierać List<Object[]> z jakiegos generycznego selectecta zrób normalne DAO w którym będziesz miał zahordkowany SQL (oczywiscie nie concatuj parapemtrów przez dodawanie Stringow tylko skorzystaj z parametrów), a jak Ci przeszkadza boilerplatowość JDBC zwykłego skorzystać z JDBCTemplate...

0

Sęk w tym, że dostałem takie metody i nie mogę ich za bardzo modyfikować, jedyne (albo aż) co muszę zrobić to przerzucić listę z pierwszej metody tak aby była jako result w drugiej metodzie. Niestety nie wiem za bardzo jak to zrobić

1

To komuś musiały nieźle wjechać piguły, że każe rzutować listę tablic Object na listę jakiejś klasy.

Można by było to jedynie karkołomnie przemapować, ale bez wiedzy o klasie ciężko wróżyć.

1

to co masz zrobic nie rozni sie bardzo od sytuacji w ktorej sam musialbys wczytywac dane z bazy przy uzyciu jdbc. tylko masz troche latwiej bo nie musisz dotykac sie do bazy danych, wiec nie popsujesz tej czesci (np. tak jak popsul autor metody ktora dostales).

  • sam tworzysz selecta, wiec zakladam ze wiesz co wyciagasz z bazy i znasz typy
  • dostajesz tablice o takim rozmiarze ile kolumn sam pobrales i o typach ktore znasz
  • masz obiekt User (zajecia z jezyku hiszpanskim nie upowazniaja do nazywania klas/metod/zmiennych po hiszpansku) ktory zapewne ma jakies pola i konstruktor ktory je ustawia
  • czyli wystarczy ze dla kazdego wiersza (element w List) pobierzesz wartosc z kazdej kolumny (element z Object[]) i przekazesz ja (bez rzutowania sie nie obedzie) do konstruktora klasy User

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