我在Android上遇到SQLite问题。我尝试以这种方式创建我的表:
贸易展览会:
String CREATE_TRADE_SHOW_TABLE = "CREATE TABLE tradeShows ( " +
"id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
"name TEXT NOT NULL, " +
"location TEXT NOT NULL, " +
"doDate DATE NOT NULL, " +
"createdDate DATETIME NOT NULL, " +
"lastModDate DATETIME NOT NULL, " +
"pictureUrl TEXT, " +
"picture BLOB )";
db.execSQL(CREATE_TRADE_SHOW_TABLE);
它工作正常,然后,供应商:
String CREATE_TRADE_SHOW_TABLE = "CREATE TABLE vendors ( " +
"id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
"tradeShowId INTEGER NOT NULL, " +
"name TEXT NOT NULL, " +
"createdDate DATETIME NOT NULL, " +
"lastModDate DATETIME NOT NULL, " +
"pictureUrl TEXT, " +
"picture BLOB," +
"FOREIGN KEY(tradeShowId) REFERENCES tradeShows(id)" +
")";
db.execSQL(CREATE_TRADE_SHOW_TABLE);
所以现在创建了我的表供应商,但是tradeShowId FOREIGN KEY不存在。我没有得到任何错误,我的表创建得很好,但没有tradeShowId。
我可能做错了什么?
答案 0 :(得分:2)
SQLite支持外键,但默认情况下不支持。
如果您为API级别16或更高级别编写,则应该在SQLiteOpenHelper类的onConfigure方法中执行此操作:
@Override
public void onConfigure(SQLiteDatabase db) {
db.setForeignKeyConstraintsEnabled(true);
}
在以前的API级别中,应该这样做:
@Override
public void onOpen(SQLiteDatabase db) {
db.execSQL("PRAGMA foreign_keys = ON;");
}
您可以在SQLite documentation:
中了解相关信息“默认情况下禁用外键约束(对于向后 兼容性),因此必须为每个数据库单独启用它们 连接。 (但请注意,SQLite的未来版本可能会 更改以便默认启用外键约束[]。 细心的开发人员不会对是否进行任何假设 外键默认启用,但将启用或禁用 必要时。)“