2012-08-24 3 views
11

이러한 오류와 관련된 많은 게시물을 검색해야했지만 여전히 문제를 해결할 수 없습니다. 여기 내 코드가 있습니다, 누군가가 나에게 잘못되어 가고있는 것을 보도록 도와 줄 수 있습니까? 나는 데이터베이스 문제 (이 경우 오라클)이있을 때 내 DBA가 나에게 말한다해당 테이블 오류 없음

- (void) copyDatabaseIfNeeded { 


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"SQL.sqlite"]; 

    if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) 
    { 
     NSLog(@"Database opened successfully"); 

if(updateStmt == nil) { 
      NSString *updStmt = [NSString stringWithFormat: @"UPDATE Coffee SET CoffeeName = '500 Plus', Price = '1.40' Where CoffeeID= '3'"]; 
    const char *mupdate_stmt = [updStmt UTF8String]; 

if(sqlite3_prepare_v2(newDBconnection, mupdate_stmt, -1, &updateStmt, NULL) != SQLITE_OK){ 
NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(newDBconnection)); 
      } else { 
       NSLog(@"Update successful"); 
      } 

     } 
     if(SQLITE_DONE != sqlite3_step(updateStmt)) 
      NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(newDBconnection)); 
     else { 
      sqlite3_reset(updateStmt); 
      NSLog(@"Step successful"); 

     } 
    } 
    else 
    { 
     NSLog(@"Error in opening database "); 
    } 
} 

답변

21

테이블 CoffeeSQL.sqlite에 없습니다.

SQLite는 데이터베이스 파일이 없으면 자동으로 만듭니다. 따라서 path이 잘못되었을 경우 빈 데이터베이스 파일이 열리는데 물론 테이블이 없습니다. 데이터베이스 파일이 존재하고 비어 있지 않은지 확인하십시오.

SELECT * FROM sqlite_master; 쿼리를 실행하여 데이터베이스에있는 테이블을 확인할 수 있습니다.

+0

SQL "SELECT * FROM sqlite_master"를 실행하여 Coffee 테이블을 찾을 수 있으며 데이터베이스가 성공적으로 열립니다. 업데이트 할 때 오류가 발생합니다. – Sunny

+1

@Sunny SQLite 브라우저 또는 Command- 다른 도구를 열 수 있습니다. 'path'를 로그에 덤프하고'UPDATE'를하기 전에'sqlite_master'를 같은 코드로 쿼리하십시오. – hamstergene

+0

괜찮아 .. 지금 일하고있어 :) 고마워. – Sunny

1

한 가지 명령 행 도구를 사용하여 쿼리를 시도하는 것입니다. 그래서 데이터베이스가 생성 된 아이폰 시뮬레이터에서

  1. 실행 응용 프로그램/문서 디렉토리에 복사 :

    이것은 당신이 sqlite3를 아이폰 시뮬레이터의 문제를 진단 할 방법이다.

  2. 시작 터미널
  3. cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents. 시뮬레이터에 하나의 앱만 설치하는 것이 가장 좋습니다. 따라서 App이 무엇인지 분명하게 알 수 있습니다.
  4. sqlite3 SQL.sqlite 그리고 거기에서 귀하의 질문을 시도하십시오. .schema 명령을 사용하여 스키마가 어떤 모양인지 확인할 수도 있습니다.

쿼리가 응용 프로그램에없고 작동하지 않으면 버그가 있음을 알 수 있습니다. 그렇지 않으면 sqlite 쿼리 문제 또는 깨진 스키마가 있습니다.

+0

이상한 만들었지 만되지 않기 때문에 일어날 수있는 app.sometimes를 설치시 생성되는 app.the 테이블을 다시 설치하십시오 그것을 그렇지 않습니다. 방금 새 테이블을 추가하고이 버그가 발생합니다. 때로는 작동하고 갑자기 깨진 상황이 있습니다. – mr5

0

테이블이 내 쿼리가 작동 명령 줄에서하지만 목표 - C에서,

관련 문제