我有一个Android应用程序,需要检查数据库中是否已有记录,如果没有,则处理一些事情并最终将其插入,并且如果数据已经存在,则只需从数据库中读取数据。我正在使用SQLiteOpenHelper的子类来创建和获取可重写实例的SQLiteDatabase,并认为它会自动处理创建表(因为要执行此操作的代码在onCreate(...)方法中)。
但是,当表尚不存在,并且我拥有的SQLiteDatabase对象上运行的第一个方法是查询(...)调用时,我的logcat显示错误“I/Database(26434):sqlite returned: error code = 1, msg = no such table: appdata”,而appdata表确实没有被创建。
有任何想法吗?
我要么寻找一种测试表是否存在的方法(因为如果没有表,数据肯定不在其中,直到写入它之前我不需要读取它,这似乎可以正确创建表),或者一种确保它得到创建的方法,并且在第一次调用query(...)之前为空。
编辑: 这是在下面两个答案发布后发布的: 我认为我可能找到了问题所在。出于某种原因,我决定每个表都应该创建一个不同的SQLiteOpenHelper,尽管两者都访问相同的数据库文件。我认为重构该代码以仅使用一个OpenHelper,并在其onCreate中创建两个表可能效果更好...
但是,当表尚不存在,并且我拥有的SQLiteDatabase对象上运行的第一个方法是查询(...)调用时,我的logcat显示错误“I/Database(26434):sqlite returned: error code = 1, msg = no such table: appdata”,而appdata表确实没有被创建。
有任何想法吗?
我要么寻找一种测试表是否存在的方法(因为如果没有表,数据肯定不在其中,直到写入它之前我不需要读取它,这似乎可以正确创建表),或者一种确保它得到创建的方法,并且在第一次调用query(...)之前为空。
编辑: 这是在下面两个答案发布后发布的: 我认为我可能找到了问题所在。出于某种原因,我决定每个表都应该创建一个不同的SQLiteOpenHelper,尽管两者都访问相同的数据库文件。我认为重构该代码以仅使用一个OpenHelper,并在其onCreate中创建两个表可能效果更好...
cursor.close();
。 - Tylerselect * from sqlite_master where UPPER(name) = 'ROUTES'
。 - Thupten