2011-11-09 9 views
8

Próbuję zapisać wartość null w bazie danych, ale za każdym razem ładować wartość dostaję 0.wstawienie null jako wartość całkowita w bazie danych

Oświadczam pole podobnie jak "intVal integer"

Jest jak odzyskać go:?

Integer x; 

x = cursor.getInt(cursor.getColumnIndexOrThrow(MyDBAdapter.KEY_X)); 

Czy to jest wiarygodne, czy jest to niezdefiniowane

Więc wydaje mi się, nie można zapisać null jako nieokreślonej integervalue

Dziękujemy

Odpowiedz

15

Od the getInt() documentation:

zwraca wartość żądanej kolumny jako int. Wynik i czy ta metoda zgłasza wyjątek, gdy wartość kolumny ma wartość NULL, typ kolumny nie jest typu integralnego lub wartość całkowita wykracza poza zakres [Integer.MIN_VALUE, Integer.MAX_VALUE] jest zdefiniowany przez implementację.

Jest to szczegół implementacji, na który nie należy polegać.

Nadal możesz uzyskać pożądany efekt, po prostu wykonaj zerową kontrolę przed odczytaniem wartości.

int index = cursor.getColumnIndexOrThrow(MyDBAdapter.KEY_X); 
Integer x = null; 
if (!cursor.isNull(index) 
    x = cursor.getInt(index); 

// now x is either null or contains a valid value 
+0

dzięki bardzo dużo ... – user387184

0

SQLite jest wpisywane dynamicznie. Ponieważ zdefiniowano kolumnę typu Integer i nie znaleziono wartości, która zwróciła 0 w oparciu o podpowiedź.

Spróbuj użyć String jako typ kolumny

+2

Co się stanie, jeśli chcesz się dowiedzieć, czy przechowywane pole było puste, a nie zero? Jak odróżnić tutaj? – Stoff81

0

Jak wspomniano Rajdeep Dua, SQLite używa dynamicznego wpisywanie. Oto co documentation mówi:

Większość silników baz danych SQL (każdy silnik bazy danych SQL inne niż SQLite, o ile wiemy) wykorzystuje statyczną, sztywną pisać. W przypadku pisania statycznego typ danych wartości jest określany przez jego kontener - konkretną kolumnę, w której zapisywana jest wartość.

SQLite używa bardziej ogólnego systemu dynamicznego. W SQLite typ danych o wartości jest powiązany z samą wartością, a nie z jej kontenerem .

Dokumentacja systemu Android mówi, że wynikiem jest , gdy wartość kolumny to null. Dla mnie zwraca także 0.

Więc użyłem getString() zamiast, chociaż wynik tej metody jest także wdrożenie zdefiniowane, dla mnie, to zwraca null kiedy wartość kolumna jest null lub łańcuch zawierający numer inaczej.

Więc kod wygląda następująco:

Strint strVal = cursor.getInt(cursor.getColumnIndexOrThrow(MyDBAdapter.KEY_X)); 

if(strVal != null){ 
    int intVal = Integer.parseInt(strVal); 
} 
Powiązane problemy