IPhone开发 - 无法使用SQLite [英] IPhone Development - Failed to use SQLite

查看:303
本文介绍了IPhone开发 - 无法使用SQLite的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to do a simply query in a database that I built, but is not working. The Path of the database looks very strange, I don't know if it is correct. I added the database in the "Resource" folder.

代码:

-(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 */  

这意味着我的数据库没有被正确复制?我该怎么办?

It means that my database is not being copied correctly? What should I do?

其他说明:

1-我试图将'query'用作 const char * ;

2-我在sqlite3.h中读到 sqlite3_open(...)永远不会返回错误,除非iPhone内存不足;

3-我检查了数据库的名称很多时间,它正好是FirstDataBase.sqlite。

Other notes:
1- I tryed to use 'query' as const char* too;
2- I read in "sqlite3.h" that sqlite3_open(...) never will return an error, unless the iPhone run out of memory;
3- I checked the name of my database lots of time, it is exactly "FirstDataBase.sqlite".

提前致谢,

Claudio

Thanks in advance,
Claudio

推荐答案

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

You mean const char *, not const NSString * (besides, const NSString * is pretty much always wrong; you mean NSString * const if anything).

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

Also consider using NSLog(@"%s", sqlite3_errmsg(database)), which usually prints out a more helpful error message.

这篇关于IPhone开发 - 无法使用SQLite的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆