Iphone SQLite到NSMutableArray对象

Iphone SQLite到NSMutableArray对象,iphone,objective-c,sqlite,Iphone,Objective C,Sqlite,我是Objectiv-C的新手,我试图让我的数据库SQLite工作,但我遇到了一些麻烦,我希望我能在这里得到一些帮助 当您使用“选项”时,我将让我的代码将所有“region\u title”绑定到tableview,并将“region\u id”绑定到id,如“html” 我已经试着搜索了一下,但是我找不到解决我问题的方法,我可以在这里帮助我 比如说,如果您需要我提供更多的代码示例,如果您认为这段代码更好,您可以重新编码它,现在我真的需要尝试一下并让它工作起来0) 我非常感谢大家的帮助 c

我是Objectiv-C的新手,我试图让我的数据库SQLite工作,但我遇到了一些麻烦,我希望我能在这里得到一些帮助

当您使用“选项”时,我将让我的代码将所有“region\u title”绑定到tableview,并将“region\u id”绑定到id,如“html”

我已经试着搜索了一下,但是我找不到解决我问题的方法,我可以在这里帮助我

比如说,如果您需要我提供更多的代码示例,如果您认为这段代码更好,您可以重新编码它,现在我真的需要尝试一下并让它工作起来0)

我非常感谢大家的帮助

   const char *sql = "SELECT region_id, region_title FROM region";
    sqlite3_stmt *statement;

    if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) 
    {
        while (sqlite3_step(statement) == SQLITE_ROW) 
        {
            NSString *aRegionId = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)] autorelease];
            NSString *aRegionTitle = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)] autorelease];

            MapClass *mapclass = [[MapClass alloc] initWithName:aRegionTitle region_id:aRegionId];
            [todoArray addObject:mapclass];

        }

        self.listData = todoArray;
    }

如果我用这个就行了

            NSString *rowData = [NSString stringWithUTF8String: sqlite3_column_text(statement, 0)];
            NSString *RegionTitle = [NSString stringWithUTF8String: sqlite3_column_text(statement, 1)];

            [mapArray addObject:rowData];
            NSLog(@"rowData: %@", rowData); 

现在我只需要将RegionTitle添加到标签文本,因为我的ID不是标签文本,我的工作也完成了:)你能帮我做些什么吗?

你应该删除
自动删除
消息,因为
[NSString stringWith…]
已经返回自动删除的字符串了。此外,编号从0开始

NSString *aRegionId = [NSString stringWithUTF8String:
                                    (char *)sqlite3_column_text(statement, 0)];
NSString *aRegionTitle = [NSString stringWithUTF8String:
                                    (char *)sqlite3_column_text(statement, 1)];
应该有用


(严格地说,您应该自动释放MapClass对象!)

因为我没有看到任何错误消息或更多关于错误(或您的数据库结构)的详细信息,我认为您的查询就是问题所在。region_id和region_table的数据类型是什么?我假设int和string

假设这是可行的:

NSString *query = [NSString stringWithFormat:@"select id, tableview from region"];
然后试试这个:

NSString *query = [NSString stringWithFormat:@"select `%i`, `%@` from `region`", region_id, region_table]; // assuming region_id is int and region_table is a string of some sort...

if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK) 
    {
        while (sqlite3_step(statement) == SQLITE_ROW) 
        {
            NSString *aRegionId = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)];
            NSString *aRegionTitle = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];

            MapClass *mapclass = [[MapClass alloc] initWithName:aRegionTitle region_id:aRegionId];
            [todoArray addObject:mapclass];

        }

        self.listData = todoArray;
    }
请注意,我已将您的查询更改为NSString。。。您的选择(不需要像上面的帖子所说的那样发布),但是在这样做的时候,您必须在这一行中将其转换为UTF8:

if(sqlite3\u prepare\u v2(数据库,[query UTF8String],-1,&statement,NULL)==SQLITE\u确定)

当然,您的语句中没有捕捉空值,因此您可以在查询中加入“其中
%@
不是空的”

在中声明。h文件 MSMutableArray*todoArray

在.m文件中使用

sqlite3 *database;

NSString *fakePassword ;

NSString *originalPassword;

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
{   
    sqlStatement = [NSString stringWithFormat:@"SELECT * FROM password"];

    sqlite3_stmt *compiledStatement;

    if(sqlite3_prepare_v2(database, [sqlStatementcStringUsingEncoding:NSUTF8StringEncoding], -1, &compiledStatement, NULL) == SQLITE_OK) 
    {           
        NSLog(@"%@",sqlStatement);

        while (sqlite3_step(compiledStatement) == SQLITE_ROW) 
        {
            fakePassword = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)] retain];
            originalPassword = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)] retain];
        }

            [todoArray addObject:fakePassword];

        sqlite3_finalize(compiledStatement);
    }       
}

}

那么你就有更多的问题;-)也许能给我们一点启发,让我们知道哪里出了问题?我已经做了一个答案,现在它的工作只是一个小细节,让我们知道它的名字:0)这是一段非常奇怪的代码。第一行的意思是什么?这个查询毫无意义。NeoNman的问题非常模糊。第一行是查询语句,NeoNman指出需要是“id”和“tableview”。。。除非我弄错了。所以%I或%@是用于存储id和tableview的int和text值的占位符(如果他重命名了它们,这是他/她的第一篇文章中的内容……除非我弄错了。我是为了泛化,以显示查询的要点,而不是本例中的确切答案。是的,我忘记省略了“sqlite3_stmt*语句”…但这并不是我想说的重点。在不知道表结构的情况下,任何人都猜得到一个精确的查询。