2014-07-07 8 views
23

ich eine Tabelle, die die folgende Zeile mit für meine ContentProvider geschaffen habe, um hinzufügen:Wie eine Boolesche Spalte in Android SQlite

static final String CREATE_DB_TABLE = 
    " CREATE TABLE " + CONTACTS_TABLE_NAME + 
    " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
    " pid TEXT NOT NULL, " + 
    " name TEXT NOT NULL,"+ 
    "number TEXT NOT NULL);"; 

Es verfügt über 4 Spalten. Jetzt möchte ich eine Spalte mit einem booleschen Wert von wahr/falsch hinzufügen. Wie kann ich hinzufügen/ändern diese Aussage, wenn ich eine boolean Spalte mit dem Namen "Status" hinzufügen muss.

+8

SQLite keinen separaten Boolesche Speicherklasse haben. Stattdessen werden boolesche Werte als ganze Zahlen 0 (falsch) und 1 (wahr) gespeichert. Check this [Post] (http://stackoverflow.com/questions/843780/store-boolean-value-in-sqlite) –

+0

Sie wollen sagen, wie '" Status INTEGER NOT NULL, "' ??? –

+0

ya genau ..... –

Antwort

52

Man könnte so etwas wie folgt verwenden:

Erstellen Sie Ihre Tabelle:

static final String CREATE_DB_TABLE = 
    "CREATE TABLE " + CONTACTS_TABLE_NAME " + 
    " (_id INTEGER PRIMARY KEY AUTOINCREMENT," + 
    "..." + " flag INTEGER DEFAULT 0)"; 

Ihr Wert abrufen wie:

Boolean flag = (cursor.getInt(cursor.getColumnIndex("flag")) == 1); 
+0

plz nehmen Sie eine Beute in diesem Beitrag, warten auf die Antwort für die letzten 3 Tage, ni hat nicht einmal einen einzigen Kommentar ... http: //stackoverflow.com/questions/24733444/how-to-use- zwei-cursors-and-cursorjoiner-in-ladermanager-in-android –

+0

Leider weiß ich nichts über 'CursorJoiner' und' LoaderManager', da ich sie nicht verwende. Mein Vorschlag ist ... kannst du nicht ** JOIN ** (oder wolltest du eine ** UNION ** machen?) Die beiden Tabellen direkt in einer einzigen Abfrage? –

+0

'CursorJoiner' verbindet tatsächlich zwei Cursor. Aber ich muss es über LoaderManager aufrufen, da es den ContentProvider automatisch abfragt. Ich muss die Änderungen zur Laufzeit reflektieren, und ich kann es mir nicht leisten, immer wieder abzufragen. –

8

Wie M D erwähnt,

SQLite keinen separaten Boolesche Speicherklasse haben. Stattdessen werden Boolesche Werte als ganze Zahlen 0 (falsch) und 1 (wahr) gespeichert.

Verwenden Sie die folgende Anweisung ALTER -

ALTER TABLE CREATE_DB_TABLE ADD status boolean NOT NULL default 0; 

Dann können Sie Cursor verwenden Sie den gewünschten Wert zu bekommen und dann zu tatsächlichen boolean konvertieren -

flag=cursor.getString(0).equals("1") 

können Sie dieses Flag verwenden, um anzuzeigen auf dem Benutzerbildschirm.

Referenz: http://www.sqlite.org/datatype3.html

+1

Nun, ich würde wahrscheinlich 'return c.getShort (index) == 1;' stattdessen verwenden. –

1
public enum Status{ 
     TRUE,FALSE; 
} 
static final String CREATE_DB_TABLE = 
    " CREATE TABLE " + CONTACTS_TABLE_NAME + 
    " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +...... 
    " booleanColumn INTEGER DEFAULT 0);"; 

// während

Pass Status.TRUE.ordinal Einfügen() Werte in die Datenbank und

// während

cross check Abrufen mit dem Ordinalwert für den Status

0

Sqlite keine Klasse nicht bieten boolean Werte zu speichern.

Sie können 0 für false und 1 für true verwenden. Sie müssen diese Werte dann konvertieren, nachdem Sie sie aus Ihrer Datenbank abgerufen haben.

0

leider android SQLite unterstützt keine booleschen Typ, und Sie sollten Integer verwenden, anstatt es

Verwandte Themen