Database 프로젝트 ( 7 ) Database 칼럼 추가 / 제거 onUpgrade 코드 / [ Android ] / 2017 . 05 . 22 . 최초 작성 아래 글 에서 이어진다 . Database 프로젝트 ( 6 ) onUpgrade 메소드 가 언제 실행 되 는가 ? / [ Android ] http : / / blog . daum . net / andro _ java / 1247 지난 3 회 ( 4 ~ 6 ) 에 걸쳐서 http : / / blog . naver . com / tinatan / 70176627500 페이지 소스 를 베끼 고 다듬 어 보 았 다 . 그런데 이 소스 도 DB 데이터 를 바로 뿌려 주 지 않 고 어레이 리스트 에 담 은 후 에 뿌려 주 고 있 는 방식 이 다 . 새로운 커서 어댑터 ListView 샘플 발견 ! 출처 : [ 안드로이드 개발 강좌 ] 커서 어댑터 ( CursorAdapter ) - 리스트 뷰 ( ListView ) http : / / blog . naver . com / kittoboy / 110134380333 이거 야말로 . .. DBHelper 클래스 onCreate 1 , 000 바퀴 돌려 12 , 000 개 정도 데이터 만들 었 는데 . .. 앱 설치 부터 눈 에 보일 때 까지 1 , 210 밀리 초 가 걸린다 . 와우 ! 1 . onUpgrade 코드 출처 소스 를 다듬 어 써야 겠 다 . 레이아웃 및 추가 / 수정 / 삭제 등 기능 은 나중 에 만들 기 로 하 고 , 우선 . public void onUpgrade ( SQLiteDatabase db , int oldVersion , int newVersion ) { db . execSQL ( " DROP TABLE IF EXISTS test "); onCreate ( db ) ; } 이렇게 코딩 하 면 다 지워 지 고 없 다 ( 대참사 ) . 2 . Database 엽 데이트 SQLiteOpenHelper . onUpgrade 구글링 구글링 에 들어가 면서 경우 에 따라 개별 적 인 코딩 이 필요 하 지 않 을까 ? 정도 의 생각 은 했 다 . 3 . 기존 칼럼 들 끝 에 칼럼 을 추가 하 는 코드 참고 : 안드로이드 DB 컬럼 추가 ( 업그레이드 ) 방법 http : / / blog . hansoolabs . com / 603 위 페이지 를 직접 보 고 참고 하 기 바라 고 , 간단 한 메모 만 남긴다 . 1 ) 케이스 / / ver 2 private static final String KEY _ IMPORTANT = " important "; private static final String DATABASE _ CREATE = " CREATE TABLE IF NOT EXISTS " + TABLE _ NAME + " ( " + . .. KEY _ IMPORTANT + " Integer DEFAULT 0 " + / / added in ver 2 ");"; 위 에서 . .. 부분 은 ( ver 1 ) 데이터베이스 에 이미 있 던 칼럼 들 이 고 , important 칼럼 하나 가 ( ver 2 ) 에서 추가 된 케이스 를 설명 하 고 있 다 . 2 ) 칼럼 추가 업데이트 oldVersion 역시 2 인 경우 는 작업 이 불 필요 하 므로 switch 제 어문 으로 걸러낸다 . public void onUpgrade ( SQLiteDatabase db , int oldVersion , int newVersion ) { switch ( oldVersion ) { case 1 : try { db . beginTransaction ( ) ; db . execSQL ( " ALTER TABLE " + TABLE _ NAME + " ADD COLUMN " + KEY _ IMPORTANT + " Integer DEFAULT 0 "); db . setTransactionSuccessful ( ) ; } catch ( IllegalStateException e ) { HLog . e ( TAG , CLASS , e ) ; } finally { db . endTransaction ( ) ; }; break ; } } 위 코드 에서 ADD COLUMN / IllegalStateException 및 beginTransaction / setTransactionSuccessful / endTransaction 기억 하 면 되 겠 다 . 그냥 베껴 쓰 면 된다 . 4 . 칼럼 을 제거 하 는 등 ( 단순 한 칼럼 추가 이외 의 모든 경우 ) 의 코드 이 코드 는 칼럼 추가 할 때 에 도 당연히 사용 할 수 있 을 것 이 다 . 참고 : How do I delete column from sqlite table in android ? ( mu is too short ) http : / / stackoverflow . com / questions / 8045249 / how - do - i - delete - column - from - sqlite - table - in - android 케이스 : ( 기존 칼럼 ) a , b , c ( 삭제 할 칼럼 ) c 코드 : 지우 고 남 을 칼럼 만 파라미터 로 전달 하 여 백업 ( t 1 _ backup 파일 생성 > INSERT ) > t 1 삭제 > 재생성 ( t 1 파일 생성 > INSERT ) > t 1 _ backup 삭제 > COMMIT 순서 로 작업 하 는 코드 를 소개 하 고 있 다 . 이해 가 가 는 멋진 삽질 이 다 . BEGIN TRANSACTION ; CREATE TEMPORARY TABLE t 1 _ backup ( a , b ) ; INSERT INTO t 1 _ backup SELECT a , b FROM t 1 ; DROP TABLE t 1 ; CREATE TABLE t 1 ( a , b ) ; INSERT INTO t 1 SELECT a , b FROM t 1 _ backup ; DROP TABLE t 1 _ backup ; COMMIT ; 위 답변자 의 설명 ( Sorry , SQLite doesn ' t support DROP COLUMN ) 을 따르 면 . .. SQLite 는 테이블 구조 변경 에 관하 여 테이블 끝 에 칼럼 하나 를 추가 하 거나 테이블 이름 을 변경 하 는 등 의 제한 된 지원 만 가능 하 다고 한다 . 5 . 어떤 칼럼 은 제거 하 고 다른 칼럼 은 추가 하 는 경우 위 두 참고 페이지 의 코드 를 순차 사용 하 면 될 듯 하 다 . 아니면 , 둘째 소스 를 가지 고 한 번 돌리 면서 지울 건 지우 고 추가 할 건 추가 하 면 될까 ? 실제로 필요 가 생기 면 어차피 삽질 이 필수 이 리라 ! 공유 하 기 글 요소 비 영리