2013-05-14 15 views
8

Czy można wstawić tabelę z liczb całkowitych, takich jak int[] numbers, do tabeli SQLite?Wstaw tabelę liczb całkowitych - int [] - do bazy danych SQLite,

Jak utworzyć kolumnę, w której umieszczam ten stół?

ta linia kodu:

values.put(MySqlHelper.COLUMN_CHILDS, numbers); 

Zwraca mi błąd jak:

Change type of `numbers` to `String` 
+0

Jeśli istnieje typ tablicy w SQLLite, a sterownik zapewnia, że ​​u, u może być. W przeciwnym razie, powinieneś napisać/przeczytać to sam, ponieważ piszesz do db jako String – Neron

+1

Zobacz [this] (http://stackoverflow.com/questions/3005231/how-to-store-array-in-one-column- in-sqlite3) odpowiedź, SQLite nie obsługuje tablic. Będziesz musiał użyć obejścia takiego jak zapisanie go jako tekstu lub użycie klucza obcego i innej tabeli. –

Odpowiedz

12

istnieje żaden typ danych tablicy w SQLite. Dostępne są dwie opcje:

Utwórz dwie różne tabele, tabelę "podstawową" i tabelę "liczb", gdzie liczby odnoszą się do rekordu (wiersza) tabeli "podstawowej" za pośrednictwem foreign key.

(łatwiejsze, ale nie idealnie): Jak sugeruje @CloudyMarble, Użyj Arrays.toString(numbers) (lub StringBuilder jeśli z jakiegoś powodu, że nie pasuje do Twoich potrzeb), aby umieścić wszystkie numery w twojej tablicy w oddzielonych przecinkami String i zapisz to w bazie danych. Następnie można ciągnąć tę wartość z powrotem z bazy danych do tablicy Java tak:

String[] s = stringFromDB.split(","); 
int[] numbers = new int[s.length]; 
for (int curr = 0; curr < s.length; curr++) 
    numbers[curr] = Integer.parseInt(s[curr]); 
+0

Nie wiedziałem o drugim rozwiązaniu, ale myślałem o stworzeniu podobnych metod, ale co sprawia, że ​​myślisz, że nie jest idealny? –

+0

Po prostu nie jest skalowalny. Jeśli twój projekt jest dość mały, będzie działał dobrze. Ale wszystkie operacje na ciągach są drogie i pozostawiają znaczną przestrzeń na błędy, więc jeśli musisz zrobić dużo z nich, skuteczniejsze będzie korzystanie z pierwszego rozwiązania. – drewmoore

+3

Ale Arrays.toString() umieszcza [] wokół ciągu znaków (jako przecinki między nimi). Twój podziałowy fragment nie usuwa ich. Nie rozumiem ParseInt może obsługiwać []? – Tom

3

wstawić numery tablicy jako ciąg:

Arrays.toString(numbers); 

I na czytaniu podzielenia macierzy za pomocą metody podziału i przekonwertuj elementy na liczbę całkowitą jako pokaz odpowiedzi @ zwinnego.

Powiązane problemy