본문 바로가기

카테고리 없음

[Android] 안드로이드에서 DB 사용하는 방법 정리



안드로이드에서 사용하는 DB는 SQLite이다. 기능이 매우 심플하고 모바일에 최적화된 데이터베이스이다.

가장 기본적인 기능은 테이블 생성, 데이터 저장, 질의, 삭제 가 있다. 사실, 이것만 있어도 왠만한 어플엔 다 적용가능하다.

여기서는 SQLite browser를 이용하지 않고 순수 안드로이드 코드 상에서 DB를 제어하고 조작하는 방법을 설명한다.
또한, 워낙 DB가 내용이 방대하기 때문에 꼭 필요한 내용만 설명할 것이며, 기초적인 DB 이론은 알고 있다는 가정하에 진행한다. (모르는 용어는 구글링 하세요)



안드로이드에서 DB를 생성, 테이블을 만들고 열고 데이터를 넣고  빼고 수정하고 쿼리를 날리고 등등 모든 작업들은 SQLiteOpenHelper와 SQLiteDatabase 클래스 내의 메소드를 통해 이루어진다.

즉, 이 두 클래스를 상속해서 써야 한다는 것이다.

SQLiteDatabase 클래스 에서는 데이터베이스에 데이터를 추가하거나 수정, 쿼리를 날리고 삭제를 하는 일을 맡는다.
SQLiteOpenHelper 클래스는 데이터베이스를 생성하고 열고 업그레이드하는 역할을 수행한다.

다음은 코드를 살펴보겠다.

우선 이클립스를 연 뒤, 프로젝트를 하나 생성한다. 그리고 다음과 같이 클래스파일을 하나 더 만들어 준다.





이 클래스에서 DB를 생성하는 역할을 한다. SQLiteOpenHelper 클래스를 상속하여 만들었으며, 그 때문에 SQLiteOpenHelper에 정의되어 있던 메소드들을 모두 구현해 주어야 한다.

9번줄에서 11번줄은 생성자이다. 상위 클래스의 생성 메소드를 호출하는데, context는 Activity의 Context 인스턴스, 두번째는 데이터베이스의 이름, 세번째는 커서팩토리 값인데 통상 null로 지정한다. 네번째는 DB의 버전을 알려주는 숫자값을 넘겨주는 역할을 한다.

14번줄 부터 32번줄 까지는 onCreate 메소드로서, 앱이 실행될 때 최초 실행이 되는 메소드이다. 만약, 자신이 앱이 생성될 때 테이블을 만들거나, 혹은 데이터까지 넣겠다고 한다면 이곳에서 쿼리를 쓰면 된다. 위에서 설명했듯이, 데이터를 조작하는 것은 SQLiteDatabase 클래스에서 맡고 있으므로 이 클래스의 객체를 생성해서 데이터를 넣어야 한다.
16~17줄은 테이블을 생성하는 구문이다. 그런데 18~20줄을 일부러 주석처리를 해 두었다. 두 구문의 차이점은 무엇일까?

답은 자동 키값을 설정할 것인지 아닌지의 여부이다. 무슨 말인고 하니, DB의 테이블은 기본키를 가져야 한다. 당연히 여기서도 테이블 생성에 앞서 기본키를 지정해 주어야 하는데 그 기본키를 자동으로 설정할 것인지, 아니면 프로그래머가 직접 기본키를 지정해 줄 것인지를 결정하는 것이다.
주석처리된 부분은 자동으로 integer형의 _id 컬럼을 기본키로 지정해 준다는 것이다. 이렇게 되면 데이터가 들어갈 때마다 _id의 숫자는 1씩 증가하게 된다.
하지만 자동 기본키는 그렇게 추천하지 않는 방법이다.
해서 16~17줄은 user_id 라는 컬럼을 기본키로 지정하고 테이블을 생성하는 것이다. id가 같을수는 없...겠지?



22~31번째 줄은 데이터까지 집어넣는 것이다. 테이블만 생성해 놓고 나중에 앱을 실행한 뒤에 사용자가 입력한 값을 DB에 넣어도 되고 이렇게 최초에 생성을 해두어야 한다면 이런 방법으로 해도 되고 그건 프로그래머의 선택.
데이터를 여러개 넣고 싶다면 구문을 복사붙여넣기하면 된다.
execSQL은 SQL 쿼리를 실행시키는 역할을 한다. 저 안에다가 쿼리를 넣으면 그대로 실행이 된다.


34줄부터는 DB의 업그레이드를 하는 부분이다. 만약, 신버전이 들어오면 기존 테이블을 삭제하고 새로 DB를 생성 한다.




다음으로 메인 액티비티이다.




DB_TESTActivity 클래스의 역할은 메인 액티비티를 정의하고 실질적으로 DB에서 데이터를 가져와서 화면에 뿌려주는 역할을 한다. 여기서는 앱을 실행시켰을 때 가장 먼저 보여지게 된다.

위의 예제는 DB에 저장되어 있는 내용들을 적절한 쿼리를 날려 모두 가져와 리스트뷰로 보여주는 것이다.

23줄 : ArrayList를 사용하겠다는 뜻이다.
26줄 : DB를 여는 역할을 한다. Write 가능한 DB를 연다는 것이다.
28줄이 중요하다. 쿼리를 날려서 가져온 것을 커서에 저장하는 것인데 커서는 구글링을 해서 따로 찾아보기 바람.

30줄 : 가져온 데이터의 갯수를 센다.
33~36줄 : 가져온 데이터를 리스트뷰에 뿌림.

37줄 : 리스트뷰를 화면에 표시
38줄~39줄 : 어댑터로 리스트뷰에 데이터 연결

40줄 : 표시


레이아웃 파일은 다음과 같다.

 



실행결과는 다음과 같다.

 






쿼리문을 응용해서 적절한 SQL구문으로 날리면 원하는 값을 얻을 수 있을 것이다.

아.. 이해하려니 힘들다.ㅋㅋ