无法在SQLite中插入,错误代码:19

当我试图运行以下:

ContentValues cv = new ContentValues(); cv.put(table_LocalSettings_Unit, input); mDb.insert(table_LocalSettings, "", cv); 

我得到了以下错误:

插入单元= 0时出错;
SqliteConstraintException:错误代码19约束失败。

应该是什么问题? 表sql代码是:

  "create table if not exists " + table_LocalSettings + "( " + table_LocalSettings_ID + " INTEGER PRIMARY KEY NOT NULL , " + table_LocalSettings_MapType + " INTEGER NOT NULL , " + table_LocalSettings_Visib + " BIT NOT NULL , " + table_LocalSettings_Unit + " INTEGER DEFAULT 0 NOT NULL , " + table_LocalSettings_SpeedUnit + " INTEGER NOT NULL , " + table_LocalSettings_Alert + " BIT NOT NULL ," + table_LocalSettings_UserID + " INTEGER DEFAULT -1 , " + table_LocalSettings_Username + " VARCHAR , " + table_LocalSettings_PowerSave + " VARCHAR , " + table_LocalSettings_PremiumUser + " INTEGER NOT NULL DEFAULT 0);"; 

  • getWritableDatabase()VS getReadableDatabase()
  • SQLiteException:表已经存在
  • Android Studio中的“android.database.sqlite.SQLitepenhelper”中没有可用的默认构造函数
  • 如何在一个SQLite查询中获取联系人ID,电子邮件,电话号码? 联系人Android优化
  • 在Android的本地SQLite数据库中存储用户名和密码是否安全?
  • SQLiteReadOnlyDatabaseException:试图写一个只读数据库(代码1032)
  • SQLiteOpenHelper与ContentProvider
  • Android JUnit4testing - 从哪里获取上下文?
  • 约束失败

    听起来像你的主键已经存在于表中

    我遇到了同样的问题,Pentium 10的回答让我朝着正确的方向前进。 validation波纹pipe代码是错误的,然后纠正它,我清除模拟器中的应用程序的数据,它重新创build了数据库,它现在工作正常。

      "create table if not exists " + DATABASE_TABLE + " (" + _ID + " integer primary key autoincrement," + " ItemName text not null, ItemID text not null, Image text not null, ImageDate text not null);"; 

    我认为我的一个问题是我有一个额外的专栏。 我之前删除了一列,并没有从上面的行中删除它。

    主要的是tripple检查错误和拼写的代码,如果使用模拟器清除数据。

    您可以在这里看到所有SQLite错误代码的列表: http://www.sqlite.org/c3ref/c_abort.html 。 错误代码19意味着在操作(插入等)期间违反了表约束(NOT NULL,UNIQUE等)。 从查看您的表创build逻辑,您的许多字段设置为NOT NULL,但您只是试图插入一个列。 如果创build表的值不能为null,那么在INSERT过程中必须包含一个非空值,否则将会看到错误代码19.如果不需要,也可以从数据库表中删除约束。

    作为一个方面的说明,还有其他的插入方法,允许处理违反约束,如

     db.insertWithOnConflict(..., ..., ..., INTEGER); 

    INTEGER是SQLiteDatabase类中的静态冲突解决variables之一(但我不认为它们中的任何一个都允许NOT NULL冲突)。 您还可以在这里阅读更多关于SQLite冲突解决scheme的信息: http : //www.sqlite.org/conflict.html

    你可以从表中删除not null ,它会正常工作。 喜欢这个:
    对:

     String callTable = "CREATE TABLE IF NOT EXISTS '%s'" + "(userid VARCHAR, callwith VARCHAR, calltype VARCHAR, callstart time, callend time, callmedia VARCHAR" + ");" 

    错误:

     String callTable = "CREATE TABLE IF NOT EXISTS '%s'" + "(userid VARCHAR not Null , callwith VARCHAR not null, calltype VARCHAR, callstart time, callend time, callmedia VARCHAR" + ");"