2013-01-15 44 views
0

我可以从iOS5中的.sql文件(sqlite)接收数据,但在ios6中。该应用程序越来越挂..sqlite3选择查询在IOS6中挂起

如果查询是select * from Table那么完美的作品

如果查询是select *from Table order by ID DESC然后应用程序越来越挂

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

有时挂挂在

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

宁愿使用核心数据来代替sql语句 – Devarshi

+1

你能否在这里粘贴你的整个代码? –

+0

我的意思是应用程序挂在“sqlite3_step(compiledStatement)== SQLITE_ROW” - 这一行.. – Fevicks

回答

1

完成声明并正确关闭连接每个y你执行一个操作,那么你应该罚款与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; 

    } 
} 
+0

感谢您的回放,但这完美地在IOS5 – Fevicks

+0

我有一个应用程序是使用sqlite,它也在iOS 6中运行良好,我正在做主线程上的所有sqlite操作。我是你有太多线程一次尝试建立数据库连接。 – pradeepa

+0

“select * from table order by ID DESC”is not working,but“select * from Table”is working – Fevicks