2014년 5월 20일 화요일

[ Android ] SQLite 사용 방법

이번 튜토리얼에서는 SQLite를 사용하는 방법을 알아보도록 하겠습니다.

SQLite는 사용 가능한 자료형은 아래와 같이 5가지만 지원 합니다.

1. NULL
2. INTEGER : 1, 2, 3, 4, 6, 8 bytes의 정수 값
3. REAL : 8bytes의 부동 소수점 값
4. TEXT : UTF-8, UTF-16BE, UTF-16LE 인코딩의 문자열
5. BLOB : 입력 된 그대로 저장

그럼 이제부터 SQLite 사용 방법에 대하여 하나씩 알아보도록 하겠습니다.

1. SQLiteOpenHelper를 상속받은 기본 구조
 DBManager라는 새로운 클래스를 생성하고 SQLite를 사용하기 위해서 SQLiteOpenHelper를 상속 받았습니다. 그리고 아래와 같이 필수로 작성되어야 하는 함수가 존재합니다.

 DBManager() 함수는 생성자로 DB 이름과 버전을 넘겨 받습니다.

 onCreate() 함수는 생성자에서 넘겨받은 이름과 버전의 데이터베이스가 존재하지 않을때 한번 호출 됩니다. 그렇기 때문에 새로운 데이터베이스를 생성할때 사용하기에 알맞습니다.

 onUpgrade() 함수는 데이터베이스가 존재하지만 버전이 다르면 호출 됩니다. 데이터베이스를 변경하고 싶을때 버전을 올려주고 새로운 작업을 해주면 됩니다.


2. 데이터베이스 생성
 새로운 데이터베이스를 생성하고 제대로 생성이 되었는지 확인해 보겠습니다. 단말기를 사용해서 확인을 하려면 루팅을 해야하고 에뮬레이터를 사용하면 명령프롬프트를 사용해서 확인을 할 수 있습니다. 여기서는 두 방법을 사용하지 않고 DB를 검색하여 데이터가 제대로 들어 갔는지 확인해보겠습니다.

먼저 DB가 존재하지 않을때 아래와 같은 FOOD_LIST 테이블을 생성하도록 하겠습니다.

 FOOD_LIST 라는 테이블에 정수형, 기본 키 그리고 자동으로 값이 증가하는 _id 컬럼과, Text형식의 name 컬럼, 정수형 price 컬럼으로 구성 되도록 만들었습니다.


3. 삽입, 삭제, 갱신, 선택
 Xml에 코드를 작성하여 버튼과 에디트 텍스트를 만들고 삽입, 삭제, 갱신, 선택을 해보도록 하겠습니다.

main.xml

 기본 생성 된 main.xml에 테이블에 입력시킬 name과 price를 입력받는 EditText 두개, 쿼리 실행 후 테이블 안의 내용을 출력 할 TextView하나 그리고 삽입, 삭제, 갱신, 선택을 실행 할 Button 4개로 구성하였습니다.


MainActivity.java

 main.xml에서 선언해 주었던 위젯들을 연결하고 각 버튼을 누를때 DBManager로 쿼리를 요청하도록 되어있습니다.
 마지막 select 쿼리는 DBManager에 테이블의 모든 요소를 가져오도록 만들었습니다.


DBManager.java

 가장 핵심적인 부분이라고 할 수 있겠습니다.
 소스를 보시면 insert(), update(), delete() 함수의 내용이 똑같이 생겼는데요. 원래는 DBManager 이 소스에서 쿼리를 작성하려고 했는데 MainActivity.java에 작성을 하다보니 함수의 내용이 똑같아져 버렸습니다. 이쪽에다가 쿼리를 작성해 주는게 더 좋겠죠.

getReadableDatabase() : 읽기 가능, 사용 후 close()로 종료
getWritableDatabase() : 읽기, 쓰기 가능, 사용 후 close()로 종료

PrintData()함수를 보시면 삽입, 삭제, 갱신 쿼리를 요청 할 때는 execSQL() 함수를 사용 하지만 선택을 할 때는 rawQuery() 함수를 사용 하여야 합니다. select 쿼리는 결과값을 받아야 하기 때문에요.
 Cursor로 결과값을 받아서 moveToNext() 함수로 null이 나올때 까지 하나씩 이동해가면서 결과값에 접근합니다.
 값을 가져올때는 테이블을 생성할 때 속성 순서대로 0 부터 생성 된 속성까지 얻어 올 수 있습니다.


Select
 - select * from 테이블명;
    테이블의 모든 속성과 값을 가져온다.

 - select 속성, 속성... from 테이블명;
    테이블에 선택한 속성의 값만 가져온다.

Insert
 - insert into 테이블명 values(속성, 속성...);
   테이블에 입력한 속성값으로 추가 한다. (속성의 순서가 일치해야 함)

Delete
 - delete from 테이블명 where 조건, 조건...;
   테이블에 조건이 일치하는 값을 삭제한다.

Update
 - update 테이블명 set 값, 값... where 조건, 조건...;
   테이블에 조건에 일치하는 속성의 값을 입력한 값으로 변경한다.

쿼리문에 조건은 콤마(,) 사용 시 여러 조건을 가질 수 있습니다.

기본적인 SQLite 사용방법 튜토리얼은 여기까지 입니다.

위 소스에는 예외처리가 안되어있습니다.






Post List