私はsqlite dbを作成しました。
そして、私は自分のデータベースにいくつかのデータを挿入しました..
UIImage * imagee=[UIImage imageNamed:@"image.png"];
NSData *mydata=[NSData dataWithData:UIImagePNGRepresentation(imagee)];
const char *dbpath = [databasePath UTF8String];
NSString *insertSQL=[NSString stringWithFormat:@"insert into CONTACTS values(\"%@\",\"%@\")",@"Mathan",mydata];
NSLog(@"mydata %@",mydata);
sqlite3_stmt *addStatement;
const char *insert_stmt=[insertSQL UTF8String];
if (sqlite3_open(dbpath,&contactDB)==SQLITE_OK) {
sqlite3_prepare_v2(contactDB,insert_stmt,-1,&addStatement,NULL);
if (sqlite3_step(addStatement)==SQLITE_DONE) {
sqlite3_bind_blob(addStatement,1, [mydata bytes], [mydata length], SQLITE_TRANSIENT);
NSLog(@"Data saved");
}
else{
NSLog(@"Some Error occured");
}
sqlite3_close(contactDB);
}
else{
NSLog(@"Failure");
}
データを取得するためのコードをいくつか書きました
sqlite3_stmt *statement;
if (sqlite3_open([databasePath UTF8String], &contactDB) == SQLITE_OK) {
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM contacts"];
if (sqlite3_prepare_v2( contactDB, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW)
{
char *field1 = (char *) sqlite3_column_text(statement, 0);
NSString *field1Str = [[NSString alloc] initWithUTF8String: field1];
NSLog(@"UserName %@",field1Str);
NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(statement, 1) length:sqlite3_column_bytes(statement, 1)];
UIImage *newImage = [[UIImage alloc]initWithData:data];
NSLog(@"Image OBJ %@",newImage);
NSLog(@"Image Data %@",data);
}
sqlite3_close(contactDB);
}
}
sqlite3_finalize(statement);
問題は
ログでは、挿入されたNSData
オブジェクトと取得されたNSData
オブジェクトが異なります (ログに出力すると、異なるストリームが得られます)
さらに、画像OBJはログにnullが出力されます..
stackoverflow で同様の質問を見たことがあります。しかし、何も役に立たないようです。