2012-01-23 2 views
0

jpeg를 nsdata 개체로 변환하려고 시도하고 fmdb 래퍼를 사용하여 sqlite 데이터베이스의 BLOB 열에 해당 데이터를 저장하려고합니다.NSite UIImageJPEGRepresentation이 SQLite fmdb에 쓰지 않습니다

예 :

UIImage *img = [UIImage imageNamed:@"house.jpeg" ]; 
NSData *data = UIImageJPEGRepresentation(img, 1.0); 
NSString *query = [NSString stringWithFormat:@"insert into t1 values (null,?)", data ]; 
(T1) 같은 것을 만들어

: 다음과 같이 밖으로 데이터를 끌어와 JPEG로 다시 전환 할 수있을 것입니다 이상적

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

:

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 표현을 포함하고 있는지 확인하기 위해 두 번 확인했습니다. 알려진 문제가 누구에게나 튀어 나오지 않습니까? 아니면이 문제를 외부에서 잘못하고 있습니까?

+1

당신은 어떤 데이터가 실제로 저장되었다 있는지 결과 sqlite가 데이터베이스를 확인 했 기둥? 그러면 처음부터 데이터를 쓰는 것이 문제가되는지 아닌지를 결정하는 데 도움이됩니다. 'UIImageJPEGRepresentation()'이'nil'이 아닌 값을 반환하는지 확인해야합니다. 이미지에 데이터가 없거나 지원되지 않는 비트 맵 형식을 사용하고 있다면 실제로'nil'을 반환 할 수 있기 때문입니다. –

답변

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 데이터가 있습니까?

경고 : 나는 몇 년 동안 데이터베이스를하지 않은 나는 내 뇌의 고대 섹션을 액세스하는거야)

+0

좋아요! 감사합니다 :) 당신은 나를 올바른 길로 인도했습니다. StringUpdate 메소드를 호출하기 전에 stringUithForm 메소드로 문자열을 미리 작성하는 대신 executeUpdate 메소드를 호출하고 변수 인수를 사용해야한다는 점을 알았습니다. –

관련 문제