2013-06-05 4 views
1

나는 cocos2d-x를 사용하여 데이터베이스를 사용해야하는 android에서 응용 프로그램을 만듭니다.cocos2d-x에서 SQLite에 삽입

내가적인 Cocos2D-X에서 SQLite는 사용, 검색 포럼 동안 발견 된 다음과 같은 방법을 사용하고 있습니다 :

  1. 사용 CCFileUtils :: getFileData()는 문자로 sqlite가 파일을 읽을 수 *
  2. 2 단계에서 파일을 여는 데 sqlite3_open()을 사용할 수있는 것보다 stfrem의 표준을 사용하여 CCFileUtils :: getWriteablePath() 안의 파일에
  3. 을 쓰십시오.

내가 가지고있는 문제는 데이터베이스에 삽입 할 때 원본 파일이 업데이트되지 않고 있다는 것입니다. 즉, 1 단계에서 sqlite 파일이 업데이트되지 않고 2 단계에서 파일이 업데이트됩니다. 이제 응용 프로그램이 다시 시작되면 2 단계에서 파일 내의 데이터를 덮어 쓰므로 삽입 데이터가 손실됩니다. 여기

내 코드입니다 :

자산 폴더는 읽기 전용 (및 포장) 당신은 당신이에 할 수있는 새로운/변경된 데이터, 유일한 장소를 저장하려면, 그래서 만약됩니다
string dbPath = CCFileUtils::sharedFileUtils()->getWritablePath(); 
dbPath.append("DischargedNew.mp3"); 
unsigned long tmpSize; 
unsigned char *xmlData = CCFileUtils::sharedFileUtils()->getFileData("Discharged.mp3", "rb", &tmpSize); 
FILE *fp = fopen(dbPath.c_str(), "wb"); 
fwrite(xmlData, tmpSize, 1, fp); 
fclose(fp); 

if(result = db->open((char*) dbPath.c_str())) 
{ 
    CCLog("DB Opened"); 
    db->query("INSERT INTO USERS (Name, Username, Email) VALUES ('Test Test', 'T', '[email protected]');"); 
} 
else 
{ 
    CCLog("OPENING WRONG, %d, MSG:%s", result, db->getError().c_str()); 
} 


db->close(); 
+0

그래서 문제는 * 귀하의 코드가 잘못된 데이터로 파일을 덮어 쓰는 것입니까? –

+0

아니요. 프로그램이 종료되면 1 단계의 파일 (원본 db 파일)이 삽입 된 새 데이터를 고려하여 업데이트되지 않습니다. 동일한 데이터를 차례로 두 번 넣으려고하면 사용자 이름이 기본 키이기 때문에 두 번째로 오류가 발생합니다. 그러나 프로그램을 다시 시작하고 정확히 동일한 쿼리를 실행하면 성공적으로 수행됩니다. 그리고 이것은 사용중인 원본 db 파일이 변경 사항을 반영 할 때마다 업데이트되지 않기 때문입니다. – user2454986

+0

이미있는 쓰기 가능한 복사본을 덮어 쓰지 않아야합니다. –

답변

3

기입 해 가능한 디렉토리 쓰기 가능한 디렉토리의 데이터베이스 만 정확하고 최신 데이터를 포함한다는 것을 의미합니다. 즉, 실제 데이터베이스 인입니다.

assets 폴더의 파일을 실제 데이터베이스 파일로 간주해서는 안됩니다. 그것을 단순히 데이터로 생각하면 실제 데이터베이스를 초기화합니다. 변경 한 후에는 assets 폴더의 파일이 오래되었습니다.

프로그램을 시작할 때 먼저 쓰기 가능한 디렉토리에있는 데이터베이스 파일이 있는지 확인하십시오. 아직없는 경우에만 assets 폴더에서 파일을 복사하여 초기화하십시오.

+0

감사합니다. 필자는 쓰기 가능한 디렉토리의 파일을 매번 다시 만들어야했기 때문에 문제가 계속 발생한다는 생각이 혼란스러워졌습니다. 질문이 있으시면 터미널에서 sqlite3에 인수로 전달하여 쓰기 가능한 디렉토리에 데이터베이스를 열 수있는 방법이 있습니까? 단지 SELECT 문을 실행하지 않고 데이터를 쉽게 추적 할 수 있습니다. – user2454986

+0

경로를 알고있는 경우. –

관련 문제