【问题标题】:How to create a new row in a SQLite table with the ID column only?如何在 SQLite 表中仅使用 ID 列创建新行?
【发布时间】:2014-11-02 14:06:12
【问题描述】:

我在 Android 上的 SQLite 数据库中有一个表,它只包含一个带有行 ID 的列。该表用于链接不同表中的数据集。当我尝试在表中插入新行时,会引发此异常:

android.database.sqlite.SQLiteException:接近“null”:语法错误 (代码 1): , 编译时: INSERT INTO JourneyDetailsTable(null) 值(空)

我的表是这样创建的:

private static final String CREATE_TABLE_JOURNEY_DETAIL = "create table " +
        TABLE_NAME + " (" + ID_COLUMN + " integer primary key autoincrement);";

我正在尝试像这样插入一个新行:

parentID = db.insert(ANOTHER_TABLE, null, new ContentValues());

有什么想法吗?

【问题讨论】:

  • 如果你想链接表,你应该有2个id列。要链接表 A 和表 B(例如),您应该有包含 id_A 和 id_B 的表 C。
  • 现在我的设置是这样的:表 A 是主表,通过行 ID 将它们链接在一起。其他 3 个表具有主表行 ID 的外键。它们在主表和其他表之间都具有一对多的关系。意思是主表的一个行id可以引用其他表的多行。
  • 那么,表 A 真的需要吗?我想你可以摆脱它。
  • 也许不是。还是谢谢。

标签: android sqlite


【解决方案1】:

SQLiteDatabase.insert(String, String, ContentValues) 的文档明确指出 SQL 不允许插入一个完全空的行而不命名至少一个列名。这意味着如果您不指定任何值,则需要指定一个列名,将 NULL 插入其中。您应该可以使用 db.insert(ANOTHER_TABLE, ID_COLUMN, new ContentValues()) 来完成此操作。

无论如何,您可能应该重新考虑您的数据库结构,因为这样设置的表似乎并不有效、可维护和可监督,尤其是从长远来看。

【讨论】:

    【解决方案2】:

    只需在插入中将 ID_COLUMN 作为列名传递,null 不是列,但将 null 传递给 id 将使 ID 自动递增:

    INSERT INTO journeyDetailsTable(ID_COLUMN) VALUES (NULL)
    

    demo

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 2021-05-21
      • 2020-10-07
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多