我创建了一个sqlite3数据库,创建了表并插入了一些数据。我可以使用终端应用程序使用select查询检索。
但是当我将这个数据库添加到我的iPhone应用程序资源并尝试以编程方式访问数据时,我得到错误“没有这样的表:表名”
为什么会这样?
答案 0 :(得分:8)
如果数据库路径不存在,sqlite3_open()会为您创建一个空数据库。因此,您提供的路径可能无法引导您到达目标文件。使用空数据库,你会得到“没有这样的表”。
答案 1 :(得分:0)
iPhone可能无法访问数据库文件。尝试从iPhone应用程序本身创建数据库。
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES
);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [
documentsDirectory stringByAppendingPathComponent:@"yourdbname.sql"
];
// Open the database. The database was prepared outside the application.
if (sqlite3_open([path UTF8String], &db_handle) != SQLITE_OK) {
// Even though the open failed,
// call close to properly clean up resources.
sqlite3_close(db_handle);
NSAssert1(0,
@"Failed to open database with message '%s'.",
sqlite3_errmsg(db_handle)
);
}
然后再次执行您的查询。此外,如果您在数据库访问代码的每一步检查潜在错误,它会有所帮助。
答案 2 :(得分:0)
我和sqlite3X C ++包装器有同样的错误。 我在我的IE插件中使用这个库。 问题是不可用.sqlite基础。 IE(非插件)的当前目录是“C:\ Documents and Settings \ UserName \ desktop \”。 当我把我的基地放在这个位置时 - 问题就解决了。