2012-05-07 10 views
0

SQLiteデータベースに接続してその内容を取得しようとしているときに、アプリケーションが実行時にクラッシュするSQLiteに問題があります。ここに私のコードは次のとおりです。SQLite接続/ステートメントを作成しようとするとアプリケーションがクラッシュする

-(IBAction)setInput:(id)sender 
{ 
    NSString *strStoreNumber; 
    NSString *strRegNumber; 

    strStoreNumber = StoreNumber.text; 
    strRegNumber = RegNumber.text; 
    lblStoreNumber.text = strStoreNumber; 
    lblRegNumber.text = strRegNumber; 

    NSString* databasePath = [[NSBundle mainBundle] pathForResource:@"tblStore" ofType:@"sqlite"]; 

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
    { 
     NSLog(@"Opened sqlite database at %@", databasePath); 
     //...stuff 
    } 
    else 
    { 
     NSLog(@"Failed to open database at %@ with error %s", databasePath, sqlite3_errmsg(database)); 
     sqlite3_close (database); 
    } 

    NSString *querystring; 

    querystring = [NSString stringWithFormat:@"SELECT strStore FROM tblStore WHERE strStore = %@;", strStoreNumber]; 

    const char *sql = [querystring UTF8String]; 

    NSString *szStore = nil; 
    NSString *szReg = nil; 

    sqlite3_stmt *statement = nil; 
    if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL)!=SQLITE_OK) //queryString = Statement 
    { 
     NSLog(@"sql problem occured with: %s", sql); 
     NSLog(@"%s", sqlite3_errmsg(database)); 
    } 
    else 
    { 
     // you could handle multiple rows here 
     while (sqlite3_step(statement) == SQLITE_ROW) // queryString = statement 
     {    
      szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 0)]; 
      szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)]; 
     } // while   

    } 

    sqlite3_finalize(statement);  
    // go on with putting data where you want  
} 

エラー私はコンソールに取得しています:

2012-05-07 09:39:33.619 CCoDBTry[962:f803] Opened sqlite database at /Users/*******/Library/Application Support/iPhone Simulator/5.1/Applications/5DB7A218-A0F6-485F-B366-91FD2F9BC062/CCoDBTry.app/tblStore.sqlite 
2012-05-07 09:39:33.623 CCoDBTry[962:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString' 
*** First throw call stack: 
(0x1593022 0x1724cd6 0x153ba48 0x153b9b9 0x9d4973 0x27c9 0x1594e99 0xd714e 0xd70e6 0x17dade 0x17dfa7 0x17d266 0xfc3c0 0xfc5e6 0xe2dc4 0xd6634 0x147def5 0x1567195 0x14cbff2 0x14ca8da 0x14c9d84 0x14c9c9b 0x147c7d8 0x147c88a 0xd4626 0x1f82 0x1ef5) 
terminate called throwing an exception(lldb) 

すべてのヘルプは大歓迎です!

EDIT:データベースで探している値がVARCHARであることに注意してください。そのことが分かっているかどうかは分かりません。

答えて

1
+[NSString stringWithUTF8String:]: NULL cString 

stringWithUTF8String:にヌル値を入力しているとのご報告をいただきました。あなたのコードには、このメソッドへの2つの呼び出しがあり、それぞれがクエリ結果から値を入力します。クエリを見ると、単一の列、strStoreのみが選択されています。私はあなたのクエリで選択していない値を取得しようとしているため、szRegに割り当てられている行が失敗していると仮定します。

nullの場合もある値にアクセスするために
+0

これはまさに私の問題でした。私はiOS/SQLiteの新機能ですので、これらのエラーを理解するのにもっと精通していることを期待しています。助けてくれてありがとう。 – Skizz

1

、私たちは、私は、一般的にクラッシュからアプリを停止します

char *sk = (char *)sqlite3_column_text(statement, 0); 
if (sk != nil) { 
    szStore = [NSString stringWithUTF8String:sk]; 
} 

この手

前にそれをチェックすることを好むことについて確認されていません。

+0

これは私を助けました。 – Tidane

関連する問題