-1

SQLite データベースにデータを挿入すると、アプリケーションがクラッシュしました。

SQLite データベースにデータを挿入する私のコードは

for (int i=0; i<[arrNewFriendsId count]; i++) {

NSString *stQuery=[NSString stringWithFormat:@"INSERT INTO NewFriendsTable (friend_id,friend_fullname) VALUES ('%@','%@')",[arrNewFriendsId objectAtIndex:i],[arrNewFriendsFullName objectAtIndex:i]];
    NSLog(@"Query registered NewFriendsTable : %@",stQuery);
    if (sqlite3_open([appdelegate.databasePath UTF8String], &database) == SQLITE_OK) {

        const char *sql =[stQuery cStringUsingEncoding:NSASCIIStringEncoding];

                    sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL);

        if(sqlite3_step(selectstmt)==SQLITE_DONE)
        {
            sqlite3_bind_text(selectstmt, 1, [[arrNewFriendsId objectAtIndex:i] UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(selectstmt, 3, [[arrNewFriendsFullName objectAtIndex:i] UTF8String], -1, SQLITE_TRANSIENT);
            NSLog(@"insert successfully NewFriendsTable ");
        }
        else
        {
            NSLog(@"insert not successfully NewFriendsTable ");

        }
        sqlite3_finalize(selectstmt);
    }

    sqlite3_close(database);


}}  

上記のコードでは、この行でアプリがクラッシュしました

sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL);

挿入されたデータは FaceBook から取得され、挿入クエリは

INSERT INTO NewFriendsTable (friend_id,friend_fullname) VALUES ('100000564063540','Rãhüł Pâtęł') 

問題がわかりません。
に関係していると思いますRãhüł Pâtęł。普通のキャラじゃないから

しかし、これが正確な問題であることもわかりません。
アドバイス、チュートリアル、コード、リンクは大きな助けになります。

4

4 に答える 4

1

問題はコード内にあります。

使用する理由:

sqlite3_bind_text(selectstmt, 1, [[arrNewFriendsId objectAtIndex:i] UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(selectstmt, 3, [[arrNewFriendsFullName objectAtIndex:i] UTF8String], -1, SQLITE_TRANSIENT);

クエリ自体に既に値があるためです。

それらのステートメントを削除する必要があります。

次のように使用します。

for (int i=0; i<[arrNewFriendsId count]; i++)
{
    NSString *stQuery=[NSString stringWithFormat:@"INSERT INTO NewFriendsTable (friend_id,friend_fullname) VALUES ('%@','%@')",[arrNewFriendsId objectAtIndex:i],[arrNewFriendsFullName objectAtIndex:i]];
    NSLog(@"Query registered NewFriendsTable : %@",stQuery);
    if (sqlite3_open([appdelegate.databasePath UTF8String], &database) == SQLITE_OK)
    {
        const char *sql =[stQuery UTF8String];
        if(sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL) == SQLITE_OK)
        {
           if(sqlite3_step(selectstmt)==SQLITE_DONE)
           {
               NSLog(@"insert successfully NewFriendsTable ");
           }
           else
           {
              NSLog(@"insert not successfully NewFriendsTable ");
           }
           sqlite3_finalize(selectstmt);
        }
        sqlite3_close(database);
    }
} 
于 2013-10-09T11:11:31.183 に答える
1

に置き換えcStringUsingEncoding:NSASCIIStringEncodingますUTF8String

const char *sql =[stQuery UTF8String];  

データベースに関する素晴らしいチュートリアル

于 2013-10-09T11:31:39.087 に答える