我的应用程序中有一个sqlite,一切似乎都没问题,但我的数据库方法没有执行while循环,我无法从查询中获得结果。有人可以帮助我吗?任何帮助都是合情合理的!
我也为数据库创建了一个副本,正如我在其他答案中看到的其他问题。
- (void)viewDidLoad {
[super viewDidLoad];
int sqlite3_open(const char *filename, sqlite3 **database);
sqlite3 *contactDB; //Declare a pointer to sqlite database structure
NSString *path = [[NSBundle mainBundle] pathForResource:@"verbeGeo" ofType:@"sqlite"];
if (sqlite3_open([path UTF8String], &contactDB) == SQLITE_OK)
{
NSLog(@"DB is open");
} else {
NSLog(@"DB can be open");
}
NSString *querySQL = @"select id from conjugare where rowid=1";
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(contactDB, query_stmt, -1,
&statement, NULL) == SQLITE_OK)
{
NSLog(@"Statement prepared successfully");
} else {
NSLog(@"Statement preparation failed");
NSLog(@"Error while creating update statement. '%s'", sqlite3_errmsg(contactDB));
NSLog(@"%s Prepare failure '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(contactDB), sqlite3_errcode(contactDB));
}
sqlite3_step(statement);
sqlite3_finalize(statement);
[self database];
}
-(void)database{
sqlite3 *contactDB;
NSString *querySQL = @"select id from conjugare where rowid=1";
const char *query_stmt = [querySQL UTF8String];
sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL);
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSString *idNumber =
[[NSString alloc] initWithUTF8String:
(const char *) sqlite3_column_text(statement, 0)];
}
sqlite3_finalize(statement);
}
答案 0 :(得分:2)
您的sqlite3_open
语句正在初始化contactDB
中定义的viewDidLoad
变量。 contactDB
中定义的database
变量是该方法的本地变量而未初始化。
1)将contactDB
设为实例变量或将其传递给database
。
2)检查所有呼叫的错误返回(例如sqlite3_prepare_v2
方法中的database
)。