我有一个从
填充的微调器SELECT * FROM sqlite_master WHERE type = 'table'
我使用该微调器来提供其他数据库操作。我的一些表可以使用,其他表失败,但有以下例外情况,具体取决于尝试的操作:
android.database.sqlite.SQLiteException:没有这样的表:main.labs :,同时编译:INSERT OR REPLACE INTO方法(名称)VALUES(?);
11-16 06:32:01.927:E / Database(25403):在准备'DROP TABLE equipment_types'时,在0x1d6e48上失败1(没有这样的表:main.labs)。 11-16 06:32:01.927:E / AssistantData(25403):drop table失败,异常:android.database.sqlite.SQLiteException:没有这样的表:main.labs:DROP TABLE equipment_types
我已经找到了与表的各种特征相关的成功/失败模式,但似乎没有一种模式。
这是一个正在运行的表的create语句:
db.execSQL("
CREATE TABLE IF NOT EXISTS oel_sources
(_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name TEXT NOT NULL, UNIQUE (name))");
一个无法正常工作:
db.execSQL("
CREATE TABLE IF NOT EXISTS methods
(_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name TEXT NOT NULL, UNIQUE (name))");
这些表中的每一个都有另一个表,其中一个外键指向_id。
我已用
删除了数据库context.deleteDatabase(DB_NAME));
我也通过应用程序管理器将其删除,完全卸载,然后再次尝试。删除/重新创建工作与不工作似乎是一致的。
最后,我完全不知所措。任何想法将不胜感激!
答案 0 :(得分:0)
今天进一步审查后,我发现所有表都不起作用是由一个表中的外键引用的。该表还引用了一个名为“labs”的不存在的表,正如错误消息试图告诉我的那样。我忘了我甚至打算制作那张桌子,所以“实验室”这个名字并没有点亮任何灯泡。已经太晚了......
获得的经验:您可以使用包含对不存在的表的外键引用的表来创建数据库。您甚至可以使用无效引用在表上完成操作。但是,使用无效引用对表的其他父表执行操作最终会导致错误。
看起来很奇怪,正如我原本预期的那样,父表只是被动地坐在那里,直到添加到它们中的某些数据,然后子表实际上指向它们,但我想这有理由超出我的理解。< / p>