web-dev-qa-db-fra.com

Insérer null dans la table SQLite

J'essaie de comprendre comment insérer une valeur NULL dans une table SQLite sous Android.

Ceci est la table:

"create table my table (_id integer primary key autoincrement, " +
                                               "deviceAddress   text not null unique, " +
                                               "lookUpKey text , " + 
                                               "deviceName text , " +
                                               "contactName text , " +
                                               "playerName text , " +
                                               "playerPhoto blob " +
                                               ");";    

Je voulais utiliser une simple commande Insérer via execSQL, mais comme l'une des valeurs est un blob, je ne peux pas le faire (je pense).

Donc, j'utilise une commande db.Insert standard . Comment rendre l'une des valeurs nulle?

Si je le saute simplement dans l'objet ContentValues, est-ce qu'il mettra automatiquement une valeur nulle dans la colonne?

33
theblitz

Oui, vous pouvez ignorer le champ dans ContentValues ​​et db.insert le définira à NULL . Vous pouvez également utiliser l’autre méthode:

ContentValues cv = new ContentValues();
cv.putNull("column1");
db.insert("table1", null, cv);

cela définit directement "column1" NULL. Vous pouvez également utiliser cette méthode dans la déclaration de mise à jour.

24
redandblack

Vous pouvez utiliser ContentValues.putNull (String key) method.

79
sujith

Je pense que vous pouvez l'ignorer, mais vous pouvez aussi mettre null, assurez-vous simplement que lorsque vous créez la base de données pour la première fois, vous ne déclarez pas la colonne comme "NOT NULL".

1
Lior Iluz

Dans votre commande d'insertion de chaîne de requête, vous pouvez insérer null pour la valeur que vous souhaitez définir. C'est C # car je ne sais pas comment vous configurez les connexions de base de données pour Android, mais la requête serait la même. Je l'ai donc donnée à des fins d'illustration.

SQLiteConnection conn = new SQLiteConnection(SQLiteConnString()); 
// where SQLiteConnString() is a function that returns this string with the path of the SQLite DB file:
// String.Format("Data Source={0};Version=3;New=False;Compress=True;", filePath);

try 
{
    using (SQLiteCommand cmd = conn.CreateCommand()
    {
        cmd.CommandText = "INSERT INTO MyTable (SomeColumn) VALUES (null)";
        cmd.ExecuteNonQuery();
    }
}
catch (Exception ex)
{
    // do something with ex.ToString() or ex.Message
}
0
vapcguy