2014-03-25 1 views
9

SQLite 데이터베이스가 손상되는 응용 프로그램에 문제가 있습니다. 이전에는 이상한 경우가 있었지만 iOS 7.1 출시 이후에는 훨씬 더 일반적인 것으로 보입니다.SQLite "데이터베이스 디스크 이미지 형식이 잘못되었습니다."

나는 당신이 여기에서 찾을 수 있습니다 마테오 Bertozzi에 의한 SQLite는 래퍼 사용하고 있습니다 : 데이터베이스가 손상됩니다 https://github.com/ConnorD/simple-sqlite

database disk image is malformed은, 일부 쿼리를 실행할 수있는 오류를 뱉어을하지만, 기존 데이터는 엉망이됩니다 .

나는 높거나 낮게 검색하여 해결책을 찾을 수 없다. 나는 여기에 누군가가 아이디어를 갖고 있기를 바란다. iOS 업데이트 이후에 더 일반적인 문제가되고 있기 때문이다.

[sqlite executeNonQuery:@"pragma integrity_check"]; 
[sqlite executeNonQuery:@"reindex nodes"]; 
[sqlite executeNonQuery:@"reindex pristine"]; 

그리고 출력했다 :

나는이 복구 명령을 시도했습니다

Core Data and iOS 7: Different behavior of persistent store iOS7에 후 SQLite는 문제를 언급 : 나는이 문제를 발견 몇 가지 더 파고으로

SQLite Step Failed: database disk image is malformed 
SQLite Prepare Failed: unable to identify the object to be reindexed 
- Query: reindex nodes 
SQLite Prepare Failed: unable to identify the object to be reindexed 
- Query: reindex pristine` 

.

NSPersistentStore을 사용하는 방법을 모르겠으므로 [sqlite executeNonQuery:@"pragma journal_mode = DELETE"];을 실행 해 보았습니다. 그냥 SQLite Step Failed: unknown error이라고 말했습니다.

다른 사람이이 문제가 발생하거나 올바른 방향으로 나를 가리키고 있습니까?

그동안 나는 NSPersistentStore이 내가해야 할 일이라고 생각합니다. 그걸 조사해야합니다.

편집 : 내가 발견 한 것을 데이터베이스 내 정기적 인 업데이트하지 않을 경우에만 NSPersistentStore를 사용

에서. 여기

내가 데이터베이스를 열 방법은 다음과 같습니다

sqlite = [[Sqlite alloc] init]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"HomeOpenDatabase8.sql"]; 

if (![sqlite open:writableDBPath]) { 
    NSLog(@"DB Not Writable"); 
    return; 
} else { 
    NSLog(@"All good"); 
} 

그래서 내가 pragma journal_mode = DELETE이 방법을 설정하는 방법을 찾을 필요가 가정을 ..?

편집 2 :

나는 그것이 내가 Core Data를 사용하지 않는로 journal_mode 함께 할 수있어 확신 아니에요 - 드로잉 보드에 다시.

나에게 가장 큰 플래그는 iOs 7.1이 출시 된 직후에이 오류가 나타나기 시작했음을 말합니다. 확실히 우연 일 수는 없습니다. 내 장치에서 문제를 계속해서 복제하려고합니다.

+0

손상을 확실하게 재현하기 위해 수행 할 수있는 특정 단계가 있습니까? – borrrden

+0

나는 그것을 계속해서 반복 할 수 없었다. 나는 계속 노력할 것이지만, 엄청난 고통이다. "core_data"를 사용하지 않아서 journal_mode라고 더 이상 확신하지 않으므로 사각형으로 돌아갑니다. – Batnom

+0

왜 당신은 pragmas를 전혀 쓰고 있습니까? – borrrden

답변

2

FMDB를 사용하는 iOS 7.0.6에서도이 문제가 발생했습니다. 나는이 명령을 맥에 복사하여 사용하여 수리 :

http://www.dosomethinghere.com/2013/02/20/fixing-the-sqlite-error-the-database-disk-image-is-malformed/

내 데이터베이스 덤프 그래서 난 트랜잭션 및 롤백 명령을 잘라 Hexfiend을 사용 2백메가바이트 오히려 크다.

+0

iPhone에서 Mac으로 DB 파일을 어떻게 복사 했습니까? –

+1

@ de_la_vega_66 iTunes를 사용하거나 Xcode가있는 경우 "기기에서 컨테이너 관리"(https://developer.apple.com/library/ios/recipes/xcode_help-devices_organizer/articles/manage_containers)로 검색하십시오. HTML – AJP