【问题标题】:Android SQLite not autoincrementingAndroid SQLite 不会自动递增
【发布时间】:2014-01-17 09:53:38
【问题描述】:

我一直试图弄清楚为什么我的自动增量 id 列不起作用。表格插入很好,但是,一旦我尝试插入另一行,id 列就不会增加。它只是尝试插入 id 为 0 的下一行。任何帮助将不胜感激!

下面是列元数据(名称和类型)和我在 db.execSQL() 方法中的创建表 sql:

ID(BaseColumns._ID, "INTEGER"),
YEAR("year", "real"),
MAKE("make", "text"),
MODEL("model", "text"),
STYLE("style", "text"),
COLOR("color", "text"),
ALT_COLOR("altColor", "text"),
CLASS("class", "text"),
CLASS_CODE("classCode", "text");

db.execSQL("CREATE TABLE " + TABLE_NAME + " (" 
+ Columns.ID.getName() + " " + Columns.ID.getType()+ " PRIMARY KEY AUTOINCREMENT" + ", "   + Columns.YEAR.getName() + " " + Columns.YEAR.getType() + ", " 
+ Columns.MAKE.getName() + " " + Columns.MAKE.getType() + ", " 
+ Columns.MODEL.getName() + " " + Columns.MODEL.getType() + ", " 
+ Columns.STYLE.getName() + " " + Columns.STYLE.getType() + ", " 
+ Columns.COLOR.getName() + " " + Columns.COLOR.getType() + ", " 
+ Columns.ALT_COLOR.getName() + " " + Columns.ALT_COLOR.getType() + ", " 
+ Columns.CLASS.getName() + " " + Columns.CLASS.getType() + ", " 
+ Columns.CLASS_CODE.getName() + " " + Columns.CLASS_CODE.getType() + ");");

【问题讨论】:

  • 你能告诉我们你的插入 SQL 命令吗?
  • 我知道它应该是什么样子,但是我正在调用 context.getContentResolver().insert(uri, values),其中值是 ContentValues。我假设这会回到我的 ContentProvider 并调用 insert 方法。
  • 而我的 ContentProvider 调用 db.insert()... ` id = db.insert(uriType.getTableName(), "foo", values);结果Uri = id == -1? null : ContentUris.withAppendedId(uri, id); `

标签: android sql sqlite android-contentprovider


【解决方案1】:
01-16 05:51:09.882: E/Database(1177): Error inserting model=SHELBY CONV. style= _id=0 color=KONA BLUE classCode=JCA class=JCA - 2012-15 - ALL year=2012 altColor= make=FORD
01-16 05:51:09.882: E/Database(1177): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed 

您不应该在插入中定义 ID 列值,正如异常中的 _id=0 所证明的那样。 Autoincrement only works if the column value is not specified:

如果插入时没有指定 ROWID,或者指定的 ROWID 的值为 NULL,则会自动创建适当的 ROWID。

【讨论】:

    【解决方案2】:

    我发现在将 ContentValues 发送到 context.getContentResolver().insert(uri, values) 方法时,您的 ContentValues 不应包含包含 id 的键/值对。这就是导致我的 _id 列不自动递增的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2018-02-24
      • 2016-03-07
      相关资源
      最近更新 更多