2012-03-22 19 views
28

AndroidのSQLiteテーブルにnull値を挿入する方法を考えようとしています。Sqliteテーブルにnullを挿入

これはテーブルです:

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

私はexecSQLを経由して、単純な挿入コマンドを使用していたが、値のいずれかが、私はそれを行うことはできませんブロブであるので、(私は思います)。

したがって、私は標準のdb.Insertコマンドを使用しています。 値の1つをnullにするにはどうすればよいですか?

ContentValuesオブジェクトでスキップすると、自動的にNULL値が列に追加されますか?

答えて

16

はい、ContentValuesのフィールドをスキップして、db.insertがNULLに設定されます。このdirectrlyセット "column1の" NULL

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

: また、あなたは他の方法を使用することができます。また、更新ステートメントでこの方法を使用することもできます。

+58

メソッドをputにnullを送ることはできません。代わりにputNullメソッドを使用する必要があります – mSafdel

+12

実際は答えは間違っていません。 android.contentパッケージにあるContentValues.javaのソースコードを確認すると、それを見ることができます。このメソッドは、指定されたヌル引数を使用してputメソッドを呼び出すだけです。 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(String key){mValues.put(key、null); } ** ... putNullの実装は変更される可能性があるので、直接配置するよりもむしろ使用する方がいいでしょう。それにもかかわらず、それはまだ正しい答えです。 – samosaris

1

私はあなたがスキップすることはできますが、nullを置くこともできると思います。データベースを最初に作成するときには、カラムを "NOT NULL"として宣言しないでください。

+0

私が日付フィールドをスキップしようとしたときに、フィールドが 'NOT NULL'である必要はないにもかかわらず、C#を使ってSQLiteに挿入しようとすると問題が発生しました。有効なDateTime'である。多分、Androidのコードが違うかもしれません。しかし、代わりに 'INSERT'コマンド文字列に' null'を挿入しなければなりませんでした。 – vapcguy

0

insert query stringコマンドでは、nullにしたい値にnullを挿入できます。これはC#です。私はAndroid用のデータベース接続をどのようにセットアップするのか分かりませんが、クエリは同じであるため、説明のために提供しています。

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 
} 
関連する問題