我无法在我的Android应用中运行的SQLite表中更新外键。
我有两个表,CASHFLOW_TABLE和ACCOUNT_TABLE。 CASHFLOW_TABLE有一个引用ACCOUNT_TABLE的_id列的外键列。我想更新一行CASHFLOW_TABLE中的值,但是当我运行此代码时
String where = "_id=?";
String[] whereArgs = {"7"};
ContentValues cv = new ContentValues();
cv.put(CF_COL_PURPOSE, "Coffee");
cv.put(CF_COL_VALUE, 2.5);
cv.put(CF_COL_ACCOUNT_ID, 4);
myDatabase.update(CF_TABLE_NAME, cv, where, whereArgs);
我收到错误消息:
E /数据库(22962):更新错误ACCOUNT_ID = 4 VALUE = 2.5 PURPOSE =咖啡使用UPDATE CASHFLOW_TABLE SET ACCOUNT_ID = ?, VALUE = ?, PURPOSE =? WHERE _id =?
我认为这与CF_COL_ACCOUNT_ID是外键的事实有关的原因是当我删除时
cv.put(CF_COL_ACCOUNT_ID, 4);
并运行代码只是为了更新其他值,它工作正常。我有什么想法吗?
更新:当我尝试将更新作为SQL语句运行时,我收到以下错误,这似乎表明问题与外键约束有关:
E /数据库(24650):执行'更新CASHFLOW_TABLE时设置VALUE = 2.5,PURPOSE ='咖啡',ACCOUNT_ID = 4,其中_id = 7'
,故障19(外键约束失败)在0x314530上下面是onCreate()中用于设置表和外键约束的代码。我在这里简化了一下 - 还有其他列和另外一个外键(这里没有显示第三个表)。
db.execSQL("Create table " + A_TABLE_NAME + " (" + A_COL_ID + " integer primary key autoincrement, " + A_COL_NAME
+ " text default ('" + A_DEFAULT_ACCOUNT + "'));");
db.execSQL("Create table " + CF_TABLE_NAME + " (" + CF_COL_ID
+ " integer primary key autoincrement, " + CF_COL_VALUE
+ " real not null, "
+ CF_COL_PURPOSE + " text not null, " + CF_COL_TIMESTAMP
+ " text not null default (strftime('%s','now')), "
+ CF_COL_ACCOUNT_ID
+ " integer not null default 1, foreign key ("
+ CF_COL_ACCOUNT_ID + ") references " + A_TABLE_NAME + " ("
+ A_COL_ID + ") on delete set default);");