0

jpeg を nsdata オブジェクトに変換し、そのデータを fmdb ラッパーを使用して sqlite データベースの blob 列に格納しようとしています。

例えば:

UIImage *img = [UIImage imageNamed:@"house.jpeg" ];
NSData *data = UIImageJPEGRepresentation(img, 1.0);
NSString *query = [NSString stringWithFormat:@"insert into t1 values (null,?)", data ];

t1 は次のように作成されます。

[database executeUpdate:@"create table t1(rowid integer primary key autoincrement, house blob)" ];

理想的には、データを取り出して、次のように jpeg に変換することができます。

NSString *query = @"select * from t1";

FMResultSet *results = [database executeQuery:query];

while ([ results next ]) 
{

    NSData *picData = [ results dataForColumn:@"house" ];
    UIImage *housePhoto = [ UIImage imageWithData:picData ];
}

文字列などの他のデータ型にこのタイプのモデルを使用しましたが、問題ありません。私の現在の試みでは、このモデルを文字列列のテーブルと 1 つの blob 列で使用しています。データベースに書き込むと、すべての文字列が正常に保存されますが、上記のように blob 列を読み戻そうとすると、blob 列に対して null が返されます。データベースに書き込む前に、書き込んでいる NSData が null ではなく、jpeg 表現が含まれていることを再確認しました。既知の問題が誰かに飛び出していますか、それとも私が外部で何か間違ったことをしているだけですか?

4

1 に答える 1

1

この行:

NSString *query = [NSString stringWithFormat:@"insert into t1 values (null,?)", data ];

常に次の文字列になります。

insert into t1 values (null,?)

-stringWithFormat: は、データを "?" にバインドしようとしていることを理解していません。

FMDatabase には、可変数の引数を取る -executeQuery: メソッドがあるようです。代わりにこれを試してください:

[database executeQuery:@"insert into t1 values (null,?)", data];

sqlite3 を使用して手動でデータベースを開いた場合、元の JPEG データはそこにありますか?

警告: 数年間データベースを作成していないため、脳内の古いセクションにアクセスしています ;)

于 2012-01-23T23:48:20.837 に答える