2013-01-15 45 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