2013-05-14 11 views
8

Ist es möglich, eine Tabelle mit ganzen Zahlen wie int[] numbers in eine SQLite-Tabelle einzufügen?Eine Tabelle mit Ganzzahlen einfügen - int [] - in die SQLite-Datenbank,

Wie erstelle ich die Spalte, wo ich diese Tabelle platziere?

diese Codezeile:

values.put(MySqlHelper.COLUMN_CHILDS, numbers); 

einen Fehler zurückgibt mich wie:

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

Wenn in SQLLite ein Array-Typ vorhanden ist und der Treiber das für Sie bereitstellt, können Sie das tun. Andernfalls sollten Sie es selbst schreiben/lesen, während Sie in db schreiben als String – Neron

+1

Siehe [this] (http://stackoverflow.com/questions/3005231/how-to-store-array-in-one-column- in-sqlite3) antworte, SQLite unterstützt keine Arrays. Sie müssen eine Problemumgehung verwenden, indem Sie sie als Text speichern oder einen Fremdschlüssel und eine andere Tabelle verwenden. –

Antwort

12

Es gibt keine Array-Datentyp in SQLite. Sie haben zwei Möglichkeiten:

Erstellen Sie 2 verschiedene Tabellen, eine "primäre" Tabelle und eine "Nummern" -Tabelle, wobei sich die Nummern auf einen Datensatz (Zeile) in der "primären" Tabelle über eine foreign key beziehen.

(einfacher, aber nicht ideal): Wie @CloudyMarble vermuten lässt, verwenden Arrays.toString(numbers) (oder ein StringBuilder wenn aus irgendeinem Grund, die nicht Ihren Bedürfnissen passt) alle Zahlen im Array in eine durch Kommata getrennte String zu setzen und Speichern Sie das in Ihrer Datenbank.

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

Ich wusste nichts über die zweite Lösung, aber ich dachte über die Schaffung ähnlicher Methoden nach, aber was lässt Sie glauben, dass es nicht ideal ist? –

+0

Es ist einfach nicht wirklich skalierbar. Wenn Ihr Projekt ziemlich klein ist, wird es gut funktionieren. Aber all diese String-Operationen sind teuer und sie lassen viel Platz für Fehler. Wenn Sie also eine Menge von ihnen tun müssen, wird es effizienter sein, die erste Lösung zu verwenden. – drewmoore

+3

Aber Arrays.toString() setzt [] um den String (als Komma zwischen ihnen). Ihr geteiltes Snippet entfernt sie nicht. Ich denke nicht, dass ParseInt mit dem [] umgehen kann? – Tom

3

geben Sie Ihre Zahlen Array als String:: Sie können dann diesen Wert aus der Datenbank in eine Java-Array wie so zurückziehen

Arrays.toString(numbers); 

Und beim Lesen spaltete die Anordnung der Split-Methode und wandle Elemente in Integer um, so wie @ threwmores Antwort-Show.

Verwandte Themen