Sqlite 无法从链接表中删除行
从表中删除行时遇到问题 我有两个表,定义如下:Sqlite 无法从链接表中删除行,sqlite,android-sqlite,Sqlite,Android Sqlite,从表中删除行时遇到问题 我有两个表,定义如下: private static final String DATABASE_TABLEELEMENTS = "elements"; public static final String KEY_ROWELEMENTID = "_id"; public static final String KEY_STUDYID = "idstudy"; public static final String KEY_ELEMENTCODE =
private static final String DATABASE_TABLEELEMENTS = "elements";
public static final String KEY_ROWELEMENTID = "_id";
public static final String KEY_STUDYID = "idstudy";
public static final String KEY_ELEMENTCODE = "code_element";
public static final String KEY_ELEMENTNAME = "description_element";
private static final String DATABASE_TABLETIME = "times";
public static final String KEY_ROWTIME = "_id";
public static final String KEY_ELEMENTID = "idelement";
public static final String KEY_HOURDATE = "hour_date";
public static final String KEY_OBSERVEDYTIME = "observedtime";
public static final String KEY_OBSERVEDACTIVITY = "observedactivity";
两个表都是相关的:
elements._id = times.idelement
我想从用户选择的表“元素”中删除表“时间”中包含“idstudy”的所有行:
为此,我创建了以下函数:
public void ResetDataStudies(String selectedid) {
String querytimes = "DELETE FROM "
+ "times"
+ " WHERE "
+ "times.idelement"
+ " IN "
+ "(SELECT "
+ "elements._id"
+ " FROM "
+ "elements"
+ " WHERE "
+ "elements.idstudy = ?)";
ourDatabase.rawQuery(querytimes, new String[] { selectedid });
}
我没有收到具体的错误,但在执行后,数据没有被删除
请参见下面的数据类型:
db.execSQL(" CREATE TABLE " + DATABASE_TABLEELEMENTS + " (" +
KEY_ROWELEMENTID + " INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, " +
KEY_ELEMENTCODE + " INTEGER NOT NULL, " +
KEY_ELEMENTNAME + " TEXT, " +
KEY_STUDYID + " TEXT NOT NULL REFERENCES " + DATABASE_TABLEACOUNT + "("+ KEY_ROWSTUDYID +") ON DELETE CASCADE ");
db.execSQL(" CREATE TABLE " + DATABASE_TABLETIME + " (" +
KEY_ROWTIME + " INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT, " +
KEY_HOURDATE + " INTEGER NOT NULL, " +
KEY_OBSERVEDYTIME + " TEXT NOT NULL, " +
KEY_OBSERVEDACTIVITY + " TEXT NOT NULL, " +
KEY_ELEMENTID + " TEXT NOT NULL REFERENCES " + DATABASE_TABLEELEMENTS + "("+ KEY_ROWELEMENTID +") ON DELETE CASCADE ");
}
我已更新了我的语句,但现在我在创建表时收到一个错误:
cascade语句附近出错创建表时,需要在DELETE cascade上使用外键
。e、 g
FOREIGN KEY ("+KEY_ELEMENTID+") REFERENCES "+DATABASE_TABLEELEMENTS+" ("+KEY_ROWELEMENTID+") ON DELETE CASCADE); "
您还必须告诉SQLite强制使用外键(否则它们将被忽略)
请参阅。查询将显示。显示一些示例数据,以及每个值的数据类型。
PRAGMA foreign_keys = ON;