Sqlite Tabelle mit Array erstellen

  • 6 Antworten
  • Letztes Antwortdatum
R

RalfKahl

Neues Mitglied
5
Hallo zusammen,

ich möchte eine Tabelle wie folgt erstellen:
CREATE TABLE IF NOT EXISTS S1060 (
date INTEGER NOT NULL DEFAULT CURRENT_DATE,
name INTEGER NOT NULL,
time INTEGER NOT NULL DEFAULT CURRENT_TIME,
A1 INTEGER NOT NULL,
A2 INTEGER NOT NULL,
A3 INTEGER NOT NULL,
D1 INTEGER NOT NULL,
D2 INTEGER NOT NULL,
D3 INTEGER NOT NULL,
F1 INTEGER NOT NULL,
F2 INTEGER NOT NULL,
F3 INTEGER NOT NULL,
PRIMARY KEY (date, name, time));
Da ich die Spalten A#, D#, F# nicht nur dreimal sondern 50 mal benötige wird es unübersichtlich. Wie kann ich denn ein Array erstellen?
A(50), A[50] oder A(1..50) funktioniert nicht.

Ich danke jetzt schon für jeden Hinweis, auch wenn der Hinweis heißt, "geht nicht".
Ralf
 
Wie kann ich denn ein Array erstellen?

Ein Array von Feldern erstellt man dafür auch nicht- das wäre "ugly" :)
(Abgesehen davon , dass das auch nicht geht)

Du kannst ein "BLOB" Feldtyp nehmen und die Inhalte - wenn sie von gleichen Typ sind - in ein ArrayString mit Delimiter umwandeln
- oder -
du erstellst Die eine Klasse (Model) und konvertierst es mit GSon in ein JSON String - die weitaus flexiblere und elegantere Variante.

Delimiter Beispiel :
Code:
String ToMyBlob = TextUtils.join(";", myArrayListofStrings);

Model Beispiel:
Code:
class _myValueModel;
{
int a1;
int a2;
String s1;
Double d1;
}

_myValueModel myModel = new _myValueModel();
myModel.a1 = 200;
myModel.a2 = 45342;
myModel.s1="Ralf";
myModel.d1=100.0;

Gson gson = new Gson();
String ToMyBlob = gson.toJson(myModel);

Das kommt dann in den BLOB rein
Code:
ContentValues cValues = new ContentValues();
cValues.put(KEY_MYBLOB, ToMyBlob);

try
{
  long row = db.insert("S1060 ",null, cValues);

Implementation:
Code:
  implementation 'com.google.code.gson:gson:2.8.9'

Wenn du die DB wieder ausliest , bekommst du einen klassischen JSON String zurück
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: RalfKahl
Bei der Variante mit Blob ist das Filtern und Suchen nach spalten nicht so einfach.
 
Ein "TEXT" Feld unterstützt allerdings keine CRLF / Esc-Sequenzen und ähnliche ASCII Zeichen, die ausserhalb der UTF-8 Konvention liegen
Deshalb ist es dringend erforderlich, bei einem JSON String und Misch-Variablen einen BLOB zu verwenden, da diese binär interpretiert werden und 0/null Variablen nicht als String- Length-Begrenzer interpretiert werden.

Er würde sonst in dem Falle ein Exception bei seinem JSONObject erhalten.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: RalfKahl
Erkläre doch mal warum deine Tabelle 150 Spalten braucht. Das lässt sich bestimmt auf mehre Tabellen aufteilen die dann verknüpft werden.
 
Danke für die ausführlichen Antworten.
In "Feldern" stehen Werte zwischen -20 und 150. Sie sind immer gefüllt, wenn auch hin und wieder mit 0. Da hier also keine außergewöhnlichen Werte drin stehen werden, finde ich die JSON-Variante recht elegant.
Ansonsten hätte ich ein VARCHAR- bzw BLOB-Feld mit Delimiter genommen. Das hätte man mit einer einfachen Funktion wieder auseinandernehmen und in Integer-Felder aufnehmen können.
Ralf
 
Das hätte man mit einer einfachen Funktion wieder auseinandernehmen und in Integer-Felder aufnehmen können.
Da wäre das Parsen eines JSONObject allerdings weit effektiver und einfacher.
 

Ähnliche Themen

Jennywise
Antworten
2
Aufrufe
43
Jennywise
Jennywise
5
Antworten
0
Aufrufe
1.305
586920
5
W
Antworten
2
Aufrufe
895
rene3006
R
Zurück
Oben Unten