【问题标题】:Insert null in Sqlite table在 Sqlite 表中插入 null
【发布时间】:2012-03-22 13:43:48
【问题描述】:

我想弄清楚如何在 Android 中将空值插入到 SQLite 表中。

这是桌子:

"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 使用一个简单的插入命令,但由于其中一个值是 blob,我不能这样做(我认为)。

所以,我使用的是标准的db.Insert 命令。 如何将其中一个值设为 null?

如果我只是在ContentValues 对象中跳过它,它会自动在列中放置一个空值吗?

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    你可以使用ContentValues.putNull(String key)方法。

    【讨论】:

      【解决方案2】:

      是的,您可以跳过 ContentValues 中的字段,db.insert 会将其设置为 NULL。 您也可以使用其他方式:

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

      这直接将“column1”设置为NULL。您也可以在更新语句中使用这种方式。

      【讨论】:

      • 您不能将 null 发送到 put 方法,而必须使用 putNull 方法
      • 其实答案没有错。当您检查位于 android.content 包中的 ContentValues.java 的源代码时,可以看到;该方法只需使用提供的 null 参数调用 put 方法。 grepcode.com/file/repository.grepcode.com/java/ext/…
      • public void putNull(String key) { mValues.put(key, null); } ...我想putNull的实现可能会改变,所以使用它可能比直接put更好。尽管如此,它仍然是一个正确的答案。
      • @Samus Arin 我认为 putNull(String key) 是一种将 Column 值设置为 null 的便捷方法,并且它的实现不应该改变。
      • 对我来说,当我试图跳过一个日期字段时,即使该字段不需要是 NOT NULL,我在尝试使用 C# 插入 SQLite 时遇到问题,给出一个错误 @ 987654324@。也许Android代码不同。但我不得不在我的INSERT 命令字符串中插入null
      【解决方案3】:

      我认为你可以跳过它,但你也可以设置 null,只要确保在第一次创建数据库时,不要将列声明为“NOT NULL”。

      【讨论】:

      • 对我来说,当我试图跳过一个日期字段时,即使该字段不需要是 NOT NULL,我在尝试使用 C# 插入 SQLite 时遇到问题,给出一个错误 @ 987654322@。也许Android代码不同。但我不得不在我的INSERT 命令字符串中插入null
      【解决方案4】:

      在您的插入查询字符串命令中,您可以插入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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 2020-05-29
        • 2020-04-23
        • 2011-09-09
        • 2011-05-14
        相关资源
        最近更新 更多