2012-03-22 37 views
28

Estoy tratando de averiguar cómo insertar un valor nulo en una tabla SQLite en Android.Insertar nulo en la tabla Sqlite

Esta es la tabla:

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

que quería utilizar un simple comando Insertar a través de execSQL pero dado que uno de los valores es una mancha que no lo puede hacer (creo).

Por lo tanto, estoy usando un comando estándar db.Insert. ¿Cómo hago que uno de los valores sea nulo?

Si solo lo omito en el objeto ContentValues, ¿pondrá automáticamente un valor nulo en la columna?

Respuesta

16

Sí, puede omitir el campo en ContentValues ​​y db.insert lo establecerá NULL. También se puede usar para otro lado:

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

este directrly conjuntos "column1" NULL. También puede usarlo de esta manera en la declaración de actualización.

+58

no puede enviar un método nulo para poner, en su lugar debe usar el método putNull – mSafdel

+12

En realidad, la respuesta no es incorrecta. Cuando marcó el código fuente de ContentValues.java que se encuentra en el paquete android.content, se puede ver que; el método simplemente llama al método put con un argumento nulo suministrado. http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/content/ContentValues.java#ContentValues.putNull%28java.lang.String % 29 – Fatih

+5

** public void putNull (clave de cadena) {mValues.put (clave, nulo); } ** ... Supongo que la implementación de putNull podría cambiar, por lo que probablemente sea mejor usarla en lugar de ponerla directamente. No obstante, sigue siendo una respuesta correcta. – samosaris

1

Creo que puede omitirlo pero también puede poner nulo, solo asegúrese de que cuando crea la base de datos por primera vez, no declare la columna como "NOT NULL".

+0

Para mí, cuando traté de saltear un campo de fecha, aunque el campo no era 'NOT NULL', tuve problemas al tratar de hacer inserciones usando C# en SQLite, dando un error que' String no fue reconocido como un DateTime' válido. Tal vez el código de Android es diferente. Pero tuve que insertar 'null' en mi cadena de comando' INSERT', en su lugar. – vapcguy

0

En su comando insertar cadena de consulta, puede insertar null para el valor que desea que sea nulo. Esto es C#, ya que no sé cómo configurar las conexiones de la base de datos para Android, pero la consulta sería la misma, así que se la proporcioné para fines ilustrativos. Estoy seguro de que podría igualar la suya:

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 
} 
Cuestiones relacionadas