fügt NULL als Integer-Wert in eine Datenbank ein

8

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

    
user387184 09.11.2011, 10:38
quelle

3 Antworten

15

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%     
Graham Borland 09.11.2011, 10:50
quelle
0

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

    
Rajdeep Dua 09.11.2011 11:03
quelle
0

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%     
Jefferson Lima 30.04.2017 02:25
quelle

Tags und Links