表格显示在sqlite_master中。有些工作,有些则没有

时间:2012-11-16 12:58:32

标签: android sqlite

我有一个从

填充的微调器
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));

我也通过应用程序管理器将其删除,完全卸载,然后再次尝试。删除/重新创建工作与不工作似乎是一致的。

最后,我完全不知所措。任何想法将不胜感激!

1 个答案:

答案 0 :(得分:0)

今天进一步审查后,我发现所有表都不起作用是由一个表中的外键引用的。该表还引用了一个名为“labs”的不存在的表,正如错误消息试图告诉我的那样。我忘了我甚至打算制作那张桌子,所以“实验室”这个名字并没有点亮任何灯泡。已经太晚了......

获得的经验:您可以使用包含对不存在的表的外键引用的表来创建数据库。您甚至可以使用无效引用在表上完成操作。但是,使用无效引用对表的其他父表执行操作最终会导致错误。

看起来很奇怪,正如我原本预期的那样,父表只是被动地坐在那里,直到添加到它们中的某些数据,然后子表实际上指向它们,但我想这有理由超出我的理解。< / p>