0

我可以在 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)
{
}
4

1 回答 1

1

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

-(int)keyIdForImgId:(int)ImgId
{

    @同步(自我)
    {
        int keyId=0;

        sqlite3 *数据库=无;
        if (sqlite3_open([[self getDBPath] UTF8String], &database) == SQLITE_OK) {

            const char *sql = "SELECT keyId From SomeTableName WHERE imageId=?";
            sqlite3_stmt *selectstmt=nil;
            如果(sqlite3_prepare_v2(数据库,sql,-1,&selectstmt,NULL)== SQLITE_OK){

                sqlite3_bind_int(selectstmt, 1, ImgId);

                而(sqlite3_step(selectstmt)== SQLITE_ROW)
                {

                    keyId = sqlite3_column_int(selectstmt, 0);


                }

            }
            sqlite3_finalize(selectstmt);
            sqlite3_close(数据库);
        }
        返回密钥ID;

    }
}
于 2013-01-15T13:33:42.263 回答