将记录从表1复制到表2时出错.sqlite约束异常错误代码19约束失败



我正在同一数据库中将所有记录(备份)从表1复制到表2。这是我的第一个数据库应用程序。

以下是表1的结构:

private static final String CREATE_SELECTED_CAND_TABLE = " CREATE TABLE if not exists "
+ TABLE_SELECTED_CAND
+ "("
+ KEY_ID
+ " integer PRIMARY KEY autoincrement,"
+ KEY_NAME1
+ " TEXT,"
+ KEY_NAME2
+ " TEXT,"
+ KEY_NAME3
+ " TEXT,"
+ KEY_NAME4
+ " TEXT," + KEY_NAME5 + " TEXT" + ")";

表2结构:

private static final String CREATE_SELECTED_CAND_RECOUNT1 = " CREATE TABLE if not exists "
+ TABLE_RECOUNT1
+ "("
+ KEY_ID
+ " integer PRIMARY KEY autoincrement,"
+ KEY_NAME1
+ " TEXT,"
+ KEY_NAME2
+ " TEXT,"
+ KEY_NAME3
+ " TEXT,"
+ KEY_NAME4
+ " TEXT," + KEY_NAME5 + " TEXT" + ")";

我是这样复制的:

mDb.execSQL(" INSERT INTO " + TABLE_RECOUNT1 + " SELECT * FROM "
+ TABLE_SELECTED_CAND);

现在的问题是,只有当所有列都不为null时才进行复制我有一些列为null,但我也想复制它们。我该如何做到这一点。?任何帮助都是非常可观的。。!

这些是堆栈跟踪:

E/AndroidRuntime(30294):android.database.sqlite.SQLiteConstraintException:错误代码19:约束失败
E/AndroidRuntime(30294):在android.database.sqlite.SQLiteStatement.natute_execute(native Methodandroid.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1968)
E/AndroidRuntime(30294):在com.dana.db.SelectedCandidatesDB.copyToRecount1(SelectedCandidatesDB.java:257)
E/AndroidRun(30294
E/AndroidRuntime(30294):在com.dana.votecount.VoteRecount$2$1.onClick(VoteRecount.java:107)

实际上可以将自动递增列设置为特定值,但前提是该值还不存在。

这些记录很可能已经存在于RECOUNT1表中。

为了确保没有旧记录,请在插入之前删除它们:

mDb.execSQL("DELETE FROM " + TABLE_RECOUNT1);
mDb.execSQL("INSERT INTO " + TABLE_RECOUNT1 + " SELECT ...");

或者,如果您知道没有任何记录发生更改,则可以使用INSERT或IGNORE命令仅插入那些ID尚未存在于目标表中的记录:

mDb.execSQL("INSERT OR IGNORE INTO " + TABLE_RECOUNT1 + " SELECT ...");

错误是由于自动增量,因为您不能或分配给自动增量列的值,您应该在查询中分配null或更改

mDb.execSQL("INSERT INTO"+TABLE_RECOUNT1+"SELECT*FROM"+TABLE_SELECTED_CAND);

具有列名的replce*没有提及自动递增列名,也用于同一查询中的表1

最新更新