【问题标题】:Insert into sqlite with default value使用默认值插入sqlite
【发布时间】:2016-03-15 19:34:45
【问题描述】:

我正在使用 SQLite 开发一个 android 程序。我正在尝试创建一个包含两个由外键关联的表的数据库,并且我想使用插入函数自动填充母表的一个条目。但这会产生一个 SQLite 错误。

这是在母类中插入条目的函数

private long new_event(SQLiteDatabase db)
{
    ContentValues values = new ContentValues();
    long id = db.insert("EVENT",null,values);
    return id;
}

这是在子类中插入条目的函数

public long new_specific_event(SQLiteDatabase db)
{
    long id_event = new_event(db);
    ContentValues values = new ContentValues();
    values.put("id_event", id_event);
    values.put("whatsoever", "whatsoever");
    long id = db.insert("SPECIFIC_EVENT",null,values);
    return id;
}

这是母桌

CREATE TABLE EVENT (id INTEGER PRIMARY KEY AUTOINCREMENT, created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

这是子表

CREATE TABLE SPECIFIC_EVENT (id INTEGER PRIMARY KEY AUTOINCREMENT, id_event NUMBER,whatsoever TEXT,FOREIGN KEY(id_event) REFERENCES EVENT(id));

这导致以下错误

android.database.sqlite.SQLiteException: near "null": syntax error (code 1): , while compiling: INSERT INTO EVENT(null) VALUES (NULL)

我可以使用this 和 db.execSQL() 函数来做到这一点,但是我无法访问我刚刚创建的条目的 ID。 那么,如何使用 insert 函数插入一个只有默认值的条目呢?

【问题讨论】:

  • 为什么要插入一些东西而不给它赋值?
  • 默认插入当前时间,所以我实际上是在赋值:
  • 不,但你为什么不希望它有一个唯一的 ID?
  • 我不明白你的意思。您的意思是合并 EVENT 和 SPECIFIC_EVENT?因为我想创建 SPECIFIC_EVENT1 和 SPECIFIC_EVENT2 并且可能更多具有不同的特征。但这可能不是一个聪明的方法。

标签: android mysql database sqlite


【解决方案1】:

对于ContentValues,您至少需要输入一个值。要获取默认值,请为列的值设置 null:

ContentValues values = new ContentValues();
values.putNull("_id");
long id = db.insert("EVENT",null,values);

【讨论】:

    【解决方案2】:

    插入一个完全空的行是不可能的,所以insert() method 有参数nullColumnHack 允许您指定一个在这种情况下获得NULL 值的列:

    ContentValues values = new ContentValues();
    long id = db.insert("EVENT", "_id", values);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2013-05-19
      • 1970-01-01
      • 2011-07-20
      • 2012-07-23
      • 2015-05-24
      • 1970-01-01
      相关资源
      最近更新 更多