【问题标题】:IPhone Development - Failed to use SQLiteiPhone 开发 - 无法使用 SQLite
【发布时间】: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 更轻松。

标签: iphone sqlite


【解决方案1】:

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

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

【讨论】:

  • 还是不行。我在 NSLog(@"%s", sqlite3_errmsg(database): Error = unrecognized token: "`èd»" 我不知道这是什么意思。你能帮帮我吗?
  • const NSString *query = @"select first_name from tbl_student"; 替换为const char * query = "select first_name from tbl_student";。听编译器警告。
  • 我已经做了,还是一样的错误。我也仔细检查了查询,它直接在数据库上工作,但它还没有在 iPhone 代码上工作。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-06
    • 2011-05-24
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多