android.database.sqlite.SQLiteConstraintException : columnidisnotunique(code19) android. 数据库.sqlite.SQLiteConstraintException

标签 android database sqlite

第一次插入行时没有任何问题。但是在同一台设备上安装应用程序(从 Eclipse 安装而不从设备上卸载应用程序)并尝试插入新行后它会抛出异常

10-1216: 36: 38.405: E/AndroidRuntime(32429): Causedby:android.database.sqlite.SQLiteConstraintException: columnidisnotunique(code19)
10-12 16:36:38.405: E/AndroidRuntime(32429): Caused by: android.database.sqlite.SQLiteConstraintException: column id is not unique (code 19)
10-12 16:36:38.405: E/AndroidRuntime(32429):    at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
10-12 16:36:38.405: E/AndroidRuntime(32429):    at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:727)
10-12 16:36:38.405: E/AndroidRuntime(32429):    at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
10-12 16:36:38.405: E/AndroidRuntime(32429):    at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
10-12 16:36:38.405: E/AndroidRuntime(32429):    at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1565)
10-12 16:36:38.405: E/AndroidRuntime(32429):    at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1514)

创建表:

    public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_USER_DATA + "("
            + KEY_ID + " TEXT PRIMARY KEY," + KEY_TIMESTAMP + " TEXT,"
            + KEY_JSON_DATA + " TEXT" + ")";
    db.execSQL(CREATE_CONTACTS_TABLE);
}

插入:

    public void addJsonData(JSONDataStore dataStore) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_ID, dataStore.getKey());
    values.put(KEY_TIMESTAMP, dataStore.getTimeStamp());
    values.put(KEY_JSON_DATA, dataStore.getJsonData());

    db.insert(TABLE_USER_DATA, null, values);
}

升级:

    @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER_DATA);

    onCreate(db);
}

插入时异常:

    db.insert(TABLE_USER_DATA, null, values);

最佳答案

该错误告诉您,您正在尝试为定义为 PRIMARY KEYID 列创建具有相同值的两行。为了让 sqlite 为您创建自动递增的 ID 值,只需删除这一行。-

values.put(KEY_ID, dataStore.getKey());

并将列声明为 INTEGER

关于android.database.sqlite.SQLiteConstraintException : columnidisnotunique(code19) android. 数据库.sqlite.SQLiteConstraintException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19333533/

相关文章:

android - 即使在 FirebaseListAdapter 中没有要填充的 View ,如何关闭进度条?

android - 使用 Intent 与 Glide 库共享图像 - 图像始终为空

mysql - INSERT INTO table IF table exists 否则创建表

database - rediSearch 无法在 db != 0 上创建索引?

iphone - 从服务器端数据库到 iPhone 进行单向同步的最佳方法是什么?

sqlite - CMake的链接器错误

java - 无法解析Android Studio中的Symbol v7和appComapat Activity导入

Android:关闭 SQLite 数据库

mysql - 在数据库中的 Prestashop 中使用 Inner Join 更新 SQL

android - 如何有效地使用 ormlite 在 android sqlite 数据库中插入批量数据