Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将记录从表1复制到表2时出错。sqlite约束异常错误代码19约束失败_Android_Sqlite - Fatal编程技术网

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

Android 将记录从表1复制到表2时出错。sqlite约束异常错误代码19约束失败,android,sqlite,Android,Sqlite,我正在将所有记录从表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,"

我正在将所有记录从表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" + ")";
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" + ")";
表2结构:

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" + ")";
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/AndroidRuntime30294: android.database.sqlite.SQLiteConstraintException:错误代码19: 约束失败 E/AndroidRuntime30294:at-android.database.sqlite.SQLiteStatement.native_执行方法 E/AndroidRuntime30294:at-android.database.sqlite.SQLiteStatement.executeUpdateDeleteSQLiteStatement.java:92 E/AndroidRuntime30294:at-android.database.sqlite.SQLiteDatabase.executeSqlSQLiteDatabase.java:2028 E/AndroidRuntime30294:at-android.database.sqlite.SQLiteDatabase.execsqlitedatabase.java:1968 E/AndroidRuntime30294:com.dana.db.SelectedCandidatesDB.copytoreCount1 SelectedCandidatesDB.java:257 E/AndroidRuntime30294:at com.dana.votecount.VoteRecount.FetchAllFromCount1votereCount.java:161 E/AndroidRuntime30294:at com.dana.votecount.VoteRecount.access$1VoteRecount.java:158 E/AndroidRuntime30294:com.dana.votecount.VoteRecount$2$1.onClickVoteRecount.java:107

该错误是由于自动递增导致的,因为您不能为自动递增的列指定或赋值。您应该在查询中为该列指定null或change

mDb.execSQL插入+表\u重新计数1+选择*FROM +表_所选_CAND

使用列名的replce*不提及自动递增列名,并且对于同一查询中的表1,实际上是可能的,但前提是该值尚不存在

记录可能已经存在于重新计数1表中

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

mDb.execSQL("DELETE FROM " + TABLE_RECOUNT1);
mDb.execSQL("INSERT INTO " + TABLE_RECOUNT1 + " SELECT ...");
或者,如果您知道没有任何记录已更改,则可以使用仅插入ID在目标表中尚不存在的记录:

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

请你展示一下表格结构的导出,这样我们就可以在适当的地方看到约束了吗?我应该只删除一个具有这个id的行。我无法将_id分配为空。。如何更改此查询以实现上述。。!工作起来很有魅力。。!衷心感谢,我使用了你的第一个建议。删除表格并插入表格!