sqlite3选择查询在IOS6中挂起

时间:2013-01-15 13:28:49

标签: iphone ios objective-c sqlite

我可以在iOS5中接收来自.sql文件(sqlite)的数据,但是在ios6中。该应用程序正在挂起..

如果查询为select * from Table,那么效果正常

如果查询为select *from Table order by ID DESC,那么应用就会挂起

应用程序有时挂在(sqlite3_open([dbPath UTF8String],&db) == SQLITE_OK)

有时会挂起

while(sqlite3_step(compiledStatement) == SQLITE_ROW)
{
}

1 个答案:

答案 0 :(得分:1)

完成语句并在每次执行操作时正确关闭连接,然后你应该没关系sqlite。如果语句没有最终确定,那么您将进入需要处理的SQLITE_BUSY,SQLITE_LOCKED等状态。如果应用程序挂起,则意味着您的主要线程被阻止。以下是sqlite操作示例。

-(int)keyIdForImgId:(int)ImgId
{

    @synchronized(self)
    {
        int keyId=0;

        sqlite3 *database=nil;
        if (sqlite3_open([[self getDBPath] UTF8String], &database) == SQLITE_OK) {

            const char *sql = "SELECT keyId From SomeTableName WHERE imageId=?";
            sqlite3_stmt *selectstmt=nil;
            if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

                sqlite3_bind_int(selectstmt, 1, ImgId);

                while(sqlite3_step(selectstmt) == SQLITE_ROW) 
                {

                    keyId = sqlite3_column_int(selectstmt, 0);


                }

            }
            sqlite3_finalize(selectstmt);
            sqlite3_close(database);
        }
        return keyId;

    }
}