Ich versuche, einen Nullwert in der Datenbank zu speichern, aber jedes Mal, wenn ich den Wert lade, bekomme ich 0.
Ich deklariere das Feld wie " intVal integer"
So erfasse ich es:
%Vor%Ist das zuverlässig? oder ist es nicht definiert?
So scheint es mir, dass man NULL nicht als undefinierten Ganzzahlwert speichern kann
Vielen Dank
Von die Dokumentation getInt()
:
Gibt den Wert der angeforderten Spalte als int zurück. Das Ergebnis und ob diese Methode eine Ausnahme auslöst, wenn der Spaltenwert null ist, der Spaltentyp kein Integraltyp ist oder der Ganzzahlwert außerhalb des Bereichs [Integer.MIN_VALUE, Integer.MAX_VALUE] liegt, ist implementierungsdefiniert.
Es handelt sich also um ein Implementierungsdetail, auf das Sie sich nicht verlassen sollten.
Sie können jedoch immer noch den gewünschten Effekt erzielen: Sie tun einfach den Null-Test, bevor Sie den Wert lesen.
%Vor%SQLite wird dynamisch typisiert. Da Sie die Spalte vom Typ Integer definiert haben und keinen Wert gefunden hat, hat sie basierend auf dem Hinweis 0 zurückgegeben.
Verwenden Sie String als Spaltentyp
Wie Rajdeep Dua erwähnt, verwendet SQLite eine dynamische Typisierung. Hier ist, was die Dokumentation sagt:
Die meisten SQL-Datenbank-Engines (jede SQL-Datenbank-Engine außer Soweit wir wissen, verwendet SQLite statische, starre Typisierung. Mit statischen Typisierung, der Datentyp eines Wertes wird durch seinen Container bestimmt - der bestimmte Spalte, in der der Wert gespeichert wird.
SQLite verwendet ein allgemeineres dynamisches Typsystem. In SQLite, der Der Datentyp eines Werts ist mit dem Wert selbst verknüpft, nicht mit seinem Wert Container.
Die Android-Dokumentation sagt, dass das Ergebnis von getInt% () Wenn der Spaltenwert null
ist, ist die Implementierung definiert. Für mich gibt es auch 0 zurück.
Also habe ich stattdessen getString () verwendet, obwohl das Ergebnis von Diese Methode ist auch für die Implementierung definiert. Für mich gibt sie null
zurück, wenn der Spaltenwert null
ist, oder eine Zeichenfolge, die andernfalls die Zahl enthält.
Also sieht der Code so aus:
%Vor%