-
[게임 개발] 유니티 - SQLiteException: no such column2021.12.31 AM 11:26
유니티 에셋스토어에서 SimpleSQL을 구매해서 사용하고 있습니다.
암산 & 주산 앱에 미니게임을 만들어 넣고 있는데요.
여러 미니 게임 정보를 넣어두는 MiniGameInfo 테이블에 최고 기록을 저장할 BestRecord 컬럼을 추가했더니 SQLiteException 에러가 나네요.
유니티 에디터에서는 정상적으로 작동했는데, 안드로이드 휴대폰에 올린 빌드에서만 에러가 발생합니다.
[증상]
- 안드로이드 휴대폰에서만 SQLiteException: no such column 에러가 발생
1. MiniGameInfo 테이블을 생성, 새로운 미니게임을 구현
2. 안드로이드 휴대폰에 빌드 올려서 테스트 - 정상 작동
3. MiniGameInfo 테이블에 BestRecord 칼럼 추가
4. 유니티 에디터에서는 정상 작동
5. 안드로이드 휴대폰에 최신 빌드를 올려서 테스트 → SQLiteException: no such column 에러가 발생
[정보]
- 최초 테이블 생성시 빠진 칼럼을 추후 추가했을때 발생할 수 있다.
https://ddolcat.tistory.com/387
제시된 해결방법
#1 - 데이터베이스 버전을 업데이트
#2 - 기존 앱을 삭제하고 다시 빌드
- Android Studio에 있는 Android Device Monitor로 SQLite DB 삭제
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=dg_667&logNo=220715214361
[시도]
- (실패) 안드로이드 설정에 들어가서 캐시, 데이터를 지우고 앱 삭제
→ 앱 클린 삭제 후 다시 빌드 -> 문제 해결되지 않고 SQLiteException: no such column 에러가 계속 발생
- (실패) Android Device Monitor
Android Device Monitor는 Android 스튜디오 3.1에서 지원 중단되고 Android 스튜디오 3.2에서 삭제되었습니다.
https://developer.android.com/studio/profile/monitor?hl=ko
- (실패) 맥의 Android 파일 전송 프로그램으로 해당 DB 삭제
1. [Android > data > com.xxx.xxx > files] 폴더에 들어가면 내가 생성한 DB.bytes 파일이 있음
2. Android 파일 전송 프로그램에서 DB.bytes 파일을 지우지는 않았음 (<- 직접 테스트 해보지는 않음)
3. 안드로이드 설정에서 캐시, 데이터를 지우고 앱 삭제한 후, Android 파일 전송 프로그램 실행시 [Android > data > com.xxx.xxx] 폴더가 보이지 않음
4. 앱 다시 빌드 → 문제 해결되지 않고 SQLiteException: no such column 에러가 계속 발생
- 여러번에 걸쳐서 앱을 삭제하고 다시 빌드하는데 내 생각과 다른 상황이 발생
1. PlayerPrefs로 저장한 값들이 지워지지 않고 계속해서 유지됨
2. DB를 drop하고 다시 create 하면, 데이터들은 사라지는데 테이블 구조는 유지되는거 같음
[문제 해결 방법]
- 별도의 BestRecord 테이블을 만들어서 구현
* 결과적으로 SQLiteException: no such column 나오는 문제를 해결하지는 못했습니다.
앱 클린 삭제로 해결되기를 기대했는데... 클린 삭제 후에 빌드후에도 기존 저장 데이터들이 유지되어서 굉장히 당황스럽더라구요.
안드로이드 SQLite DB (파일) 자체를 삭제하거나, DB 버전을 올려서 업데이트하는 내용은 해보지 못했습니다.
그래서 기존 테이블에 BestRecord 칼럼을 추가하지 않고, 별도의 BestRecord 테이블을 만들어서 구현하는 것으로 처리했네요.
SQLite DB 관련해서 작업을 할 때, 가능하면 ALTER Table ADD column은 피해야겠다...는 생각이 들었습니다. ㅠㅠ
user error : Error. B.