【发布时间】:2010-08-26 08:13:26
【问题描述】:
我正在尝试在我构建的数据库中进行简单查询,但无法正常工作。 数据库的Path看起来很奇怪,不知道对不对。我在“资源”文件夹中添加了数据库。
代码:
-(void)getInitialDataToDisplay:(NSString *)dbPath {
int result;
SQLiteTestAppDelegate *appDelegate = (SQLiteTestAppDelegate *)[[UIApplication sharedApplication] delegate];
result = sqlite3_open([dbPath UTF8String], &database) ;
if (result == SQLITE_OK) {
const char *query = "select first_name from tbl_student";
sqlite3_stmt *selectstmt;
result = sqlite3_prepare_v2(database, query, -1, &selectstmt, nil);
if(result == SQLITE_OK) {
NSLog(@"Query executed with success!!!!");
}
else {
NSLog(@"Error on execute query! Error = %i",result);
}
}
else {
sqlite3_close(database);
NSLog(@"Error on connect to database! Error = %i",result);
}
}
-(NSString *)getDBPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:@"FirstDataBase.sqlite"];
}
输出:
**2010-08-20 08:55:15.810 SQLiteTest[263:207] Begin: connect to database
2010-08-20 08:55:15.843 SQLiteTest[263:207] Database copied with success! Location: /Users/claudio/Library/Application Support/iPhone Simulator/4.0/Applications/358B8748-7A2A-4FD4-943E-31B801279CA1/Documents/FirstDataBase.sqlite
2010-08-20 08:55:15.844 SQLiteTest[263:207] Error on execute query! Error = 1**
来自“sqlite.h”
#define SQLITE_ERROR 1 /* SQL error or missing database */
这意味着我的数据库没有被正确复制?我该怎么办?
其他说明:
1- 我尝试使用“查询”作为const char* too;
2- 我在“sqlite3.h”中读到 sqlite3_open(...) 永远不会返回错误,除非 iPhone 内存不足;
3- 我多次检查我的数据库名称,它正是“FirstDataBase.sqlite”。
提前致谢,
克劳迪奥
【问题讨论】:
-
您获得的路径正是您的代码所要求的 - 这是 iPhone 模拟器中您的应用程序的
/Documents文件夹的路径。 -
是的,我检查了文件夹,数据库在那里并且是正确的。你知道为什么这个查询不起作用吗?有什么建议吗?
-
为了热爱宇宙中所有正确和美好的事物,请使用包装器(FMDB、TouchDB 等)!它会让你的生活如此轻松很多。从第一天起,iPhone 就开始使用 sqlite 数据库,许多开发人员已经发布了代码,说明如何比直接使用 C API 更轻松。