2011-08-15 18 views
0

BLOB SQLデータ型に問題があります。問題はNSDataをデータベースに挿入できないことです。コンパイラにエラーは表示されませんが、データベースのファイルサイズはデータ挿入後に変更されません。すべての種類のものを試しましたが、これは私が書いた最後の機能ですが、それはより穏やかに働くようです。事前に感謝してください!BLOBをSQLiteデータベースに挿入できません

sqlite3 *database; 
     if (sqlite3_open([databasePath UTF8String], &database)== SQLITE_OK) 
     { 
      NSString *statement = [[NSString alloc]initWithFormat:@"insert into %@(date,name,type,urlpath) values('%@','%@','0','%@')",mainPath, 
            currentTime, 
            (*incomingObject).fileName, 
            filterURL]; 
      NSLog(@"\n--==%@ %@==--",(*incomingObject).fileName,(*incomingObject).urlAdress); 
      const char *sqlStatement = [statement UTF8String]; 
      [statement release]; 
      sqlite3_stmt *compiledStatement; 
      sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL); 
      sqlite3_step(compiledStatement); 
      sqlite3_reset(compiledStatement); 
      sqlite3_finalize(compiledStatement); 
     } 
     sqlite3_close(database); 
     break; 

答えて

3

SQL文でパラメータ値を渡すのはあまりお勧めできません。この方法では、SQLインジェクションから保護されません。

sqlite3_bind_ *のようなSQLite C-API関数を使用することをお勧めします。 sqlite3_bind_blobメソッドは、テーブルにブロブを挿入できるようになります

+0

iv've too。それは動作しません。 – Florik

+0

sqlite3_bind_blob(compiledStatement、5、[(* incomingObject).file bytes]、[(* incomingObject).file length]、NULL); – Florik

+1

最初の投稿にその部分のコードを表示できますか?そのリクエストに他のデータを挿入しますか?プロパティからはどちらがBLOBデータですか?また、_bytes_ _NSData_自体を渡す必要があります。たとえば、次のようにします。 'sqlite3_bind_blob(ステートメント、インデックス、[imageDataバイト]、[imageData length]、SQLITE_STATIC);' _imageData_はNSDataオブジェクトです。 –

関連する問題