dodawanie elementow listy do bazy

0

hejka, mam takie pytanie. mam zmienna typu LinkedList, ktora po wypisaniu wyglada tak:

[1, 2, A, 1, D, 2]itd

kazda z tych pozycji to kolejny element listy. Musze to teraz dodac do bazy, ale przy probie zapytania, nie rozdzieli mi tych elementow tylko uzna [1, 2, A, 1, D, 2] za jeden element..
Jak napisac zapytanie aby on to dzielil i wrzucal mi do kolejnych rekordow wartosci po kolei (i bez przecinka i spacji):
1
2
A
1
D
2

?

0

Przejrzyj odpowiedzi do postu @misty zatytułowanego sczytywanie z pliku

0

sugerujesz ze mam uzyc substringa? ale ja tym razem nie wiem ile elementow ma lista, jaka one maja dlugosc itd..

lista moja jest zbiorem innych list, ma definicje:

 LinkedList<LinkedList> nowa_lista = new LinkedList();

i teraz przykladowo, chce dodac pierwsza linked liste z nowa_lista:
insert into tabela(pole) values('nowa_lista.get(0)');

no ale jak wspomnialam wczesniej, jak wypisze sobie nowa_lista.get(0) to dostane :
[1, 2, A, 1, D, 2]itd

to tylko przyklad wartosci, nie moge uzyc substringa bo tym razem nie znam dlugosci i pozycji poszczegolnych elementow..

0

Po pierwsze formułuj precyzyjnie pytania, trudno zgadnąć, że każdy element LinkedList jest kolejną LinkedList.
Sugeruję użycie pętli w pętli:

for (int i=0;i<zmienna.size();i++)
{
    LinkedList ll==zmienna.get(i);
    StringBuffer cmd=new StringBuffer("INSERT INTO "+NAZWA_TABELI+" (");
    for (int j=0;j<ll.size();j++)
    {
          cmd.append(NAZWA_POLA_I);
          cmd.append((j==ll.size()-1)?")":",");
    }
    cmd.append(" VALUES (");
    for (int j=0;j<ll.size();j++)
    {
          cmd.append(ll.get(i));
          cmd.append((j==ll.size()-1)?")":",");
    }
    // tutaj wykonanie zapisu
}

Rozważ posłużenie się PreparedStatement, wtedy pętla zapisująca będzie wyglądać mniej więcej tak (działanie jest szybsze):

StringBuffer cmd=new StringBuffer("INSERT INTO "+NAZWA_TABELI+" (");
for (int j=1;j<=ilePol;j++)
{
      cmd.append(NAZWA_POLA_I);
      cmd.append((j==ll.size()-1)?")":",");
}
cmd.append(" VALUES (");
for (int j=1;j<=ilePol;j++)
{
     cmd.append("?");
     cmd.append((j==ll.size()-1)?")":",");
}
PreparedStatement ps=conn.preparedStatement(cmd.toString());
for (int i=0;i<zmienna.size();i++)
{
    LinkedList ll==zmienna.get(i);
    for (int j=0;j<ll.size();j++)
    {
         ps.setString(j+1,ll.get)i)) // jeżeli wszystkie pola są znakowe
    }
    // tutaj wykonanie zapisu
}
0

lool.. a prosciej jakos sie nie da? bo nie do konca rozumiem co sie tu dzieje..

0

Spróbuję prościej. Masz kolekcję dane klasy LinkedList, każdy element tej kolekcji jest znowu obiektem ll (też klasy LinkedList). Na podstawie obiektu ll chcesz utworzyć rekord w pewnej tabeli - nazwa tabeli to TABELKA. Zakładam, że wszystkie obiekty ll mają taka samą ilość elementów = ILE_POL, pola które chcesz wypełnić w tabeli TABELKA mają nazwy POLE_1,..,POLE_M. Polecenie SQL winno wyglądać z grubsza tak

insert into TABELKA(POLE_1,...,POLE_M) values(WART_1,...,WART_M)

Ta insert into TABELKA(POLE_1,...,POLE_M) values( część polecenia jest stała, reszta zależy od tego co zawiera ll. Poniższy kod zakłada, że wszystkie elementy ll mają zostać wykorzystane, są we właściwej kolejności oraz że każdy element jest typu String i tego oczekuje TABELKA.

String cmd="insert into TABELKA(POLE_1,...,POLE_M) values(";
for (int i=0;i<ILE_POL;i++)
{
   cmd+="'"+ll.get(i)+"'"; // nie jestem pewien co do "'"
   // po każdej wartości (prócz ostatniej) trzeba dopisać przecinek, po ostatniej nawias zamykający
   cmd+=(i==ILE_POL-1)?")":",";
}
0

dzieki! :)

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