【发布时间】:2012-06-06 12:01:53
【问题描述】:
下面是我的代码,我正在尝试从 my.sqlite 数据库中获取数据,但它没有执行我的 if 案例。它总是在 else 条件下进入。我在做什么错事? 我无法执行我的 if 案例,即 if(sqlite3_prepare_v2(database, sqlQuerry, -1, &queerryStatement, NULL)==SQLITE_OK)
sqlite3 *database;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"my.sqlite"];
const char* dbPath=[databasePath UTF8String];
if(sqlite3_open(dbPath, &database)==SQLITE_OK)
{
const char *sqlQuerry="SELECT * FROM Contacts;";
sqlite3_stmt *querryStatement;
if(sqlite3_prepare_v2(database, sqlQuerry, -1, &querryStatement, NULL)==SQLITE_OK)
{
NSLog(@"conversion successful....");
while (sqlite3_step(querryStatement)==SQLITE_ROW)
{
NSString *addressField = [[NSString alloc] initWithUTF8String:
(const char *)
sqlite3_column_text(querryStatement, 0)];
NSString *phoneField = [[NSString alloc] initWithUTF8String:
(const char *) sqlite3_column_text(querryStatement, 1)];
NSLog(@"DB ID :- %@",addressField);
NSLog(@"DB NAME :- %@",phoneField);
}
sqlite3_reset(querryStatement);
}
else {
NSLog(@"error while conversion....");
}
sqlite3_close(database);
}
/////////////////////////////////////// ////////////////////////////// 我尝试使用 FMDB 并按照以下方式进行操作: 但是我的 *s 和 *results 对象正在获得 nil 值,并且未执行 while 语句
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsPath = [paths objectAtIndex:0];
NSString *path = [docsPath stringByAppendingPathComponent:@"my.sqlite"];
FMDatabase* database = [FMDatabase databaseWithPath:path];
[database open];
FMResultSet *s = [database executeQuery:@"SELECT COUNT(*) FROM Contacts"];
while ([s next])
{
int totalCount = [s intForColumnIndex:0];
NSLog(@"Count : %i", totalCount);
}
FMResultSet *results = [database executeQuery:@"select * from Contacts"];
while([结果下一个]) {
NSString *contact_id = [results stringForColumn:@"contact_id"];
NSString *name = [results stringForColumn:@"name"]; //
NSLog(@"User: %@ - %@",name, contact_id);
}
[database close];
【问题讨论】:
-
是的,我也尝试过 FMDB,但失败了……
-
尝试一件事,而不是
const char *sqlQuerry="SELECT * FROM Contacts;";,尝试使用NSString*sqlStatement=[NSString stringWithFormat:@"select * from Contacts"]; const char*sqlStmt=[sqlStatement UTF8String];,然后尝试使用sqlite3_errmsg() -
那么错误是什么?你永远不知道它实际上可能会告诉你什么是坏的。
-
尝试命名字段而不是使用 *.
-
我尝试使用字段名称但没有成功
标签: iphone objective-c ios sqlite