나는 cocos2d-x를 사용하여 데이터베이스를 사용해야하는 android에서 응용 프로그램을 만듭니다.cocos2d-x에서 SQLite에 삽입
내가적인 Cocos2D-X에서 SQLite는 사용, 검색 포럼 동안 발견 된 다음과 같은 방법을 사용하고 있습니다 :
- 사용 CCFileUtils :: getFileData()는 문자로 sqlite가 파일을 읽을 수 *
- 2 단계에서 파일을 여는 데 sqlite3_open()을 사용할 수있는 것보다 stfrem의 표준을 사용하여 CCFileUtils :: getWriteablePath() 안의 파일에
- 을 쓰십시오.
내가 가지고있는 문제는 데이터베이스에 삽입 할 때 원본 파일이 업데이트되지 않고 있다는 것입니다. 즉, 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();
그래서 문제는 * 귀하의 코드가 잘못된 데이터로 파일을 덮어 쓰는 것입니까? –
아니요. 프로그램이 종료되면 1 단계의 파일 (원본 db 파일)이 삽입 된 새 데이터를 고려하여 업데이트되지 않습니다. 동일한 데이터를 차례로 두 번 넣으려고하면 사용자 이름이 기본 키이기 때문에 두 번째로 오류가 발생합니다. 그러나 프로그램을 다시 시작하고 정확히 동일한 쿼리를 실행하면 성공적으로 수행됩니다. 그리고 이것은 사용중인 원본 db 파일이 변경 사항을 반영 할 때마다 업데이트되지 않기 때문입니다. – user2454986
이미있는 쓰기 가능한 복사본을 덮어 쓰지 않아야합니다. –