Разработка iPhone - не удалось использовать SQLite - PullRequest
1 голос
/ 20 августа 2010

Я пытаюсь сделать простой запрос в базе данных, которую я построил, но не работает. Путь к базе данных выглядит очень странно, я не знаю, правильно ли это. Я добавил базу данных в папку «Ресурс».

Код:

-(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.

Заранее спасибо,
Claudio

Ответы [ 2 ]

1 голос
/ 20 августа 2010

Вы имеете в виду const char *, а не const NSString * (кроме того, const NSString * это почти всегда неверно ; вы имеете в виду NSString * const, если что).

Также рассмотрите возможность использования NSLog(@"%s", sqlite3_errmsg(database)), которая обычно выводит более полезное сообщение об ошибке.

0 голосов
/ 26 августа 2010

Хорошо, ребята, теперь я уверен, что решил это.Но это не тот способ, которым я хотел бы, потому что я думаю, что он не будет работать, когда я компилирую / копирую код для устройства.

Я скопировал базу данных непосредственно в тот каталог, который показан в выводе.Я не знаю, почему код не получает путь из моей базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...