首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlite的iOS-5中的性能问题

Sqlite的iOS-5中的性能问题
EN

Stack Overflow用户
提问于 2012-06-19 10:45:51
回答 6查看 1.1K关注 0票数 7

在iOS 5中使用sqlite时,我面临一个问题。,我从两个表中获取记录:一个在食谱中,另一个在一个Menu.db中。

从菜谱表中,我得到了所有的记录,在此基础上,我从recipeid表中获取了记录。在iOS 4.2上运行时,不需要花时间获取记录,但当我在iOS 5上运行时,获取记录需要时间。请参阅下列代码:

代码语言:javascript
复制
NSString *query = [NSString stringWithFormat:@"select id from Recipes"];
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, [query UTF8String], -1, &selectstmt, NULL) == SQLITE_OK) {
    while(sqlite3_step(selectstmt) == SQLITE_ROW) {
        rcp.recipeID = sqlite3_column_int(selectstmt, 0);
        NSString *sql = [NSString stringWithFormat:@"select Name from Ingredients where recipeId = %d",rcp.recipeID];
        sqlite3_stmt *stmt2;
        if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt2, NULL) == SQLITE_OK) {
            while(sqlite3_step(stmt2) == SQLITE_ROW) {}
        }
    }
}

为什么在iOS 5.0中会出现这个问题,相同的代码在iOS 4.0,4.2上运行得很好?

我知道,我写的代码是对的,我想知道iOS 5.0中这个性能问题的确切原因,因为我的应用程序完全是围绕数据库构建的。

EN

回答 6

Stack Overflow用户

发布于 2012-06-28 09:19:18

在完成第一个查询的完整执行之后,尝试使用两个不同的函数,从第二个查询开始。

例如:-

代码语言:javascript
复制
NSString *query = [NSString stringWithFormat:@"select id from Recipes"];
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, [query UTF8String], -1, &selectstmt, NULL) == SQLITE_OK) {
    while(sqlite3_step(selectstmt) == SQLITE_ROW) {
        rcp.recipeID = sqlite3_column_int(selectstmt, 0);
    }
}

然后打电话

代码语言:javascript
复制
 NSString *sql = [NSString stringWithFormat:@"select Name from Ingredients where recipeId = %d",rcp.recipeID];
            sqlite3_stmt *stmt2;
            if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt2, NULL) == SQLITE_OK) {
                while(sqlite3_step(stmt2) == SQLITE_ROW) {}

希望这有助于解决你的问题。

票数 1
EN

Stack Overflow用户

发布于 2012-06-28 11:18:32

我认为你和libsqlite3.dylib有联系。您应该将libsqlite3.0.dylib库链接起来。

票数 1
EN

Stack Overflow用户

发布于 2012-06-28 12:12:06

如果你想把你的.db转到.sqlite

打开您的.db文件,从CSV中选择表文件->export-> Table (用.csv格式保存您的文件)(就像选择所有表一样),然后打开.sqlite文件->Import->从CSV打开.sqlite文件后,在.csv文件中出现一个对话框,从第一行提取的字段名必须勾选,现在您的sqlite已经准备好了。

将此文件放入您的项目中

然后设置..sqlite/..db文件路径

现在,将select查询设置为

代码语言:javascript
复制
#import <sqlite3.h>


    -(void)SelectSqlData:(NSString *)SearchString
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *path = [documentsDirectory stringByAppendingPathComponent:@"yourfileName.sqlite"];
        sqlite3_stmt *compiledStatement;
        sqlite3 *database;
        if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) {

            const char *sqlStatement;

            sqlStatement = "select c.field1,c.field2,c.field3,c.field4 from YourTableName1 as c,  YourTableName2 as b  where b.Artist_Id = ?"; 

            sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL);

            //printf("\nError===%s",sqlite3_errmsg(database));


            if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {

                sqlite3_bind_text(compiledStatement,1,[SearchString UTF8String] , -1,SQLITE_STATIC);

                while(sqlite3_step(compiledStatement) == SQLITE_ROW ) 

                {

                        NSString *str_field1=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];

                        NSString *str_field2=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];

                        NSString *str_field3=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

                        NSString *str_field4=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];


    // add str_field into array


            }

            }

            sqlite3_finalize(compiledStatement);


        }


        sqlite3_close(database);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11099368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档