IPhone开发 - 无法使用SQLite

时间:2010-08-19 23:30:32

标签: iphone sqlite

我正在尝试在我构建的数据库中进行简单查询,但是无法正常工作。 数据库的路径看起来很奇怪,我不知道它是否正确。我在“资源”文件夹中添加了数据库。

代码:

-(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-我尝试将'query'用作const char* too;
2-我在“sqlite3.h”中读到sqlite3_open(...)永远不会返回错误,除非iPhone内存不足;
3-我在很多时间检查了我的数据库名称,它正是“FirstDataBase.sqlite”。

提前致谢,
克劳迪奥

2 个答案:

答案 0 :(得分:1)

你的意思是const char *,而不是const NSString *(此外,const NSString * 几乎总是错误的;你的意思是NSString * const如果有的话。 / p>

另请考虑使用NSLog(@"%s", sqlite3_errmsg(database)),这通常会打印出更有用的错误消息。

答案 1 :(得分:0)

好的,伙计们,现在我确定我已经解决了。但这不是我喜欢的方式,因为我认为在编译/复制设备代码时它不起作用。

我将数据库直接复制到输出中显示的目录。我不知道为什么代码没有从我的数据库中获取路径。