Iphone sqlite3 blob问题
可能重复: 我尝试将BLOB数据读写到数据库中。但是当我尝试读取blob数据时,它的大小是0。我所有的字段数据都被移动了。代码如下: 请帮帮我,我做错了什么??塔克斯Iphone sqlite3 blob问题,iphone,sqlite,blob,Iphone,Sqlite,Blob,可能重复: 我尝试将BLOB数据读写到数据库中。但是当我尝试读取blob数据时,它的大小是0。我所有的字段数据都被移动了。代码如下: 请帮帮我,我做错了什么??塔克斯 -(int) addUser: (MyData *) user table: (NSString *) tableName { } 在这里,我如何读取这些字段: -(MyData *) createUserWithDetailsByID: (int) uID { NSString *query = [NSString
-(int) addUser: (MyData *) user table: (NSString *) tableName
{
}
在这里,我如何读取这些字段:
-(MyData *) createUserWithDetailsByID: (int) uID
{
NSString *query = [NSString stringWithFormat: @SELECT_USER_ALLDATA_BY_ID, uID];
MyData *user = nil;
sqlite3_stmt *statement;
int res = SQLITE_ERROR;
res = sqlite3_prepare_v2 (database, [query UTF8String], -1, &statement, nil);
if (res == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
//if there are results in row
char *buf = NULL;
user = [[MyData alloc] init];
int num = sqlite3_column_int(statement, 0);
user.uID = num;
buf = (char *)sqlite3_column_text(statement, 1);
if (buf)
user.name = [NSString stringWithFormat: @"%s", buf];
else
user.name = @"";
buf = (char *)sqlite3_column_text(statement, 2);
if (buf)
user.surname = [NSString stringWithFormat: @"%s", buf];
else
user.surname = @"";
buf = (char *)sqlite3_column_text(statement, 3);
if (buf)
user.email = [NSString stringWithFormat: @"%s", buf];
else
user.email = @"";
buf = (char *)sqlite3_column_text(statement, 4);
if (buf)
user.telephone = [NSString stringWithFormat: @"%s", buf];
else
user.telephone = @"";
int len = 0;
len = sqlite3_column_bytes(statement, 5);
NSData *imgData = [[NSData alloc] initWithBytes: sqlite3_column_blob(statement, 5) length: len];
UIImage *i;
[i initWithData:imgData];
}
}
sqlite3_finalize(statement);
return user;
}
我认为在编写时,应该使用[imageData bytes]和[imageData length]。
NSData是一个obj-C类,它不是一个无符号字符数组
我认为在编写时,应该使用[imageData bytes]和[imageData length]。
NSData是一个obj-C类,它不是一个无符号字符数组 Thanx all!!在你们的帮助下,我已经解决了这个问题,并想和我一样的未来初学者分享结果
-(void) addToDB
{
NSLog(@"\nCreating db");
NSString *str = @"CREATE TABLE IF NOT EXISTS Images (image1 BLOB);";
int res = SQLITE_ERROR;
res = sqlite3_open([@"aa.sql" UTF8String], &database);
res = sqlite3_exec(database, [str UTF8String], NULL, NULL, NULL);
sqlite3_stmt *updStmt =nil;
const char *sql = "INSERT INTO Images (image1) VALUES (?);";
res = sqlite3_prepare_v2(database, sql, -1, &updStmt, NULL);
if(res!= SQLITE_OK)
{
NSLog(@"Error while creating update statement:%@", sqlite3_errmsg(database));
}
UIImage *img = [UIImage imageNamed: @"flower.png"];
NSData *imageData = [NSData dataWithData: UIImagePNGRepresentation(img)];
res = sqlite3_bind_blob(updStmt, 1, [imageData bytes], [imageData length] , NULL);
if((res = sqlite3_step(updStmt)) != SQLITE_DONE)
{
NSLog(@"Error while updating: %@", sqlite3_errmsg(database));
sqlite3_reset(updStmt);
}
res = sqlite3_reset(updStmt);
res = sqlite3_close(database);
}
-(void) readFromDB
{
NSLog(@"\nReading from db");
NSString *query = @"SELECT image1 from Images";
int res = SQLITE_ERROR;
int len = 0;
res = sqlite3_open([@"aa.sql" UTF8String], &database);
sqlite3_stmt *statement;
res = sqlite3_prepare_v2 (database, [query UTF8String], -1, &statement, nil);
if (res == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
len = sqlite3_column_bytes(statement, 0);
NSData *imgData = [[NSData alloc] initWithBytes: sqlite3_column_blob(statement, 0) length: len];
UIImage *img = [[UIImage alloc] initWithData:imgData];
self.view1.image = img;
}
}
sqlite3_finalize(statement);
res = sqlite3_close(database);
}
谢谢大家!!在你们的帮助下,我已经解决了这个问题,并想和我一样的未来初学者分享结果
-(void) addToDB
{
NSLog(@"\nCreating db");
NSString *str = @"CREATE TABLE IF NOT EXISTS Images (image1 BLOB);";
int res = SQLITE_ERROR;
res = sqlite3_open([@"aa.sql" UTF8String], &database);
res = sqlite3_exec(database, [str UTF8String], NULL, NULL, NULL);
sqlite3_stmt *updStmt =nil;
const char *sql = "INSERT INTO Images (image1) VALUES (?);";
res = sqlite3_prepare_v2(database, sql, -1, &updStmt, NULL);
if(res!= SQLITE_OK)
{
NSLog(@"Error while creating update statement:%@", sqlite3_errmsg(database));
}
UIImage *img = [UIImage imageNamed: @"flower.png"];
NSData *imageData = [NSData dataWithData: UIImagePNGRepresentation(img)];
res = sqlite3_bind_blob(updStmt, 1, [imageData bytes], [imageData length] , NULL);
if((res = sqlite3_step(updStmt)) != SQLITE_DONE)
{
NSLog(@"Error while updating: %@", sqlite3_errmsg(database));
sqlite3_reset(updStmt);
}
res = sqlite3_reset(updStmt);
res = sqlite3_close(database);
}
-(void) readFromDB
{
NSLog(@"\nReading from db");
NSString *query = @"SELECT image1 from Images";
int res = SQLITE_ERROR;
int len = 0;
res = sqlite3_open([@"aa.sql" UTF8String], &database);
sqlite3_stmt *statement;
res = sqlite3_prepare_v2 (database, [query UTF8String], -1, &statement, nil);
if (res == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
len = sqlite3_column_bytes(statement, 0);
NSData *imgData = [[NSData alloc] initWithBytes: sqlite3_column_blob(statement, 0) length: len];
UIImage *img = [[UIImage alloc] initWithData:imgData];
self.view1.image = img;
}
}
sqlite3_finalize(statement);
res = sqlite3_close(database);
}
-(void) addToDB
{
NSLog(@"\nCreating db");
NSString *str = @"CREATE TABLE IF NOT EXISTS Images (image1 BLOB);";
int res = SQLITE_ERROR;
res = sqlite3_open([@"aa.sql" UTF8String], &database);
res = sqlite3_exec(database, [str UTF8String], NULL, NULL, NULL);
sqlite3_stmt *updStmt =nil;
const char *sql = "INSERT INTO Images (image1) VALUES (?);";
res = sqlite3_prepare_v2(database, sql, -1, &updStmt, NULL);
if(res!= SQLITE_OK)
{
NSLog(@"Error while creating update statement:%@", sqlite3_errmsg(database));
}
UIImage *img = [UIImage imageNamed: @"flower.png"];
NSData *imageData = [NSData dataWithData: UIImagePNGRepresentation(img)];
res = sqlite3_bind_blob(updStmt, 1, [imageData bytes], [imageData length] , NULL);
if((res = sqlite3_step(updStmt)) != SQLITE_DONE)
{
NSLog(@"Error while updating: %@", sqlite3_errmsg(database));
sqlite3_reset(updStmt);
}
res = sqlite3_reset(updStmt);
res = sqlite3_close(database);
}
-(void) readFromDB
{
NSLog(@"\nReading from db");
NSString *query = @"SELECT image1 from Images";
int res = SQLITE_ERROR;
int len = 0;
res = sqlite3_open([@"aa.sql" UTF8String], &database);
sqlite3_stmt *statement;
res = sqlite3_prepare_v2 (database, [query UTF8String], -1, &statement, nil);
if (res == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
len = sqlite3_column_bytes(statement, 0);
NSData *imgData = [[NSData alloc] initWithBytes: sqlite3_column_blob(statement, 0) length: len];
UIImage *img = [[UIImage alloc] initWithData:imgData];
self.view1.image = img;
}
}
sqlite3_finalize(statement);
res = sqlite3_close(database);
}