J'ai créé une table pour ma ContentProvider
en utilisant la ligne suivante:
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);";
Il a 4 colonnes. Maintenant, je veux ajouter une colonne avec une valeur booléenne de vrai/faux. Comment puis-je ajouter ajouter/changer cette déclaration si je dois ajouter un boolean column nommé "status" .
Vous pouvez utiliser quelque chose comme ceci:
Créez votre table:
static final String CREATE_DB_TABLE =
"CREATE TABLE " + CONTACTS_TABLE_NAME " +
" (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"..." + " flag INTEGER DEFAULT 0)";
récupérer votre valeur en tant que:
Boolean flag = (cursor.getInt(cursor.getColumnIndex("flag")) == 1);
Comme mentionné par M D,
SQLite n'a pas de classe de stockage booléenne séparée. Au lieu, Les valeurs booléennes sont stockées sous forme de nombres entiers 0 (faux) et 1 (vrai).
Utilisez l'instruction ALTER suivante -
ALTER TABLE CREATE_DB_TABLE ADD status boolean NOT NULL default 0;
Ensuite, vous pouvez utiliser le curseur pour obtenir la valeur requise, puis convertir en booléen réel -
flag=cursor.getString(0).equals("1")
Vous pouvez utiliser cet indicateur pour afficher sur l'écran de l'utilisateur.
Référence: http://www.sqlite.org/datatype3.html
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);";
// en insérant
passer les valeurs Status.TRUE.ordinal () à la base de données et
// en récupérant
vérifier par recoupement avec la valeur ordinale pour le statut
Sqlite ne fournit aucune classe pour stocker des valeurs booléennes.
Vous pouvez utiliser 0
pour false
et 1
pour true
. Vous devrez ensuite convertir ces valeurs après les avoir extraites de votre base de données.
malheureusement, Android sqlite ne prend pas en charge le type booléen et vous devez utiliser Integer à la place.