본문 바로가기

안드로이드 개발 팁/데이터베이스

데이터베이스, 그 속이 궁금하다?

데이터베이스를 사용하는 어플리케이션을 작성하다 보면 일반 어플리케이션을 작성할 때보다 더 많은 에러(-_-)를 만나게 될 확률이 높아집니다. 데이터베이스 관련 코드가 간단하지 않기 때문이기도 하지만, 코드 뿐만 아니라 데이터베이스 자체에 문제가 있어서 에러가 발생하기도 하기 때문이죠.

이 때문에 데이터베이스 안에 저장된 내용을 확인해보아야 하는 경우가 종종 있습니다. 그런데... 데이터베이스 안의 내용을 보려면 커서를 통해 데이터베이스를 받아오고, 원하는 항목을 화면에 출력하고... 이래야 할까요? 으으, 상상만 해도 끔찍하군요.
다행이도 안드로이드에서는 데이터베이스의 내용을 조회할 수 있는 sqlite3라는 툴을 제공합니다.

sqlite3 사용하기

sqlite3를 통해 데이터베이스의 내용을 보려면 우선 데이터베이스가 있는 곳으로 이동해야 합니다. 여기에서는 주소록 데이터베이스에 접근해보도록 하죠. 에뮬레이터 혹은 기기를 연결한 상태에서 명령 프롬프트를 실행한 후 adb shell을 입력하거나, 실행 창에서 바로 adb shell을 입력합니다.

실행 창에서 adb shell 입력




컴퓨터에 두 개 이상의 에뮬레이터 혹은 단말기가 연결되어 있을 경우 adb shell 명령을 실행할 수 없습니다. 하나의 에뮬레이터 혹은 기기를 연결하여 작업을 수행해야 합니다.


명령을 실행하면 아래와 같이 셸 프롬프트가 표시됩니다.



데이터베이스가 있는 경로로 이동하도록 합니다. 주소록 데이터베이스는 data/data/com.android.proiders.contacts/databases 에 있습니다. 이 경로로 이동합니다.


이제 데이터베이스 파일을 열어봅시다. SDK 2.0 버전 이후부터 주소록 데이터베이스 파일의 이름은  contacts2.db로 바뀌었습니다. sqlite3 contacts2.db를 입력하여 데이터베이스 파일을 열도록 합니다.


위와 같은 화면이 뜨면서 sqlite3가 실행됩니다. 이제, 데이터베이스 안의 데이터들을 조회해 보도록 하죠.


sqlite3 명령을 통해 데이터베이스를 열 때 데이터베이스 이름을 잘못 입력해도 위와 같이 sqlite3 툴이 실행되지만, 데이터베이스가 연결되지 않은 상태이므로 명령을 입력하면 오류가 발생하게 됩니다. 따라서 sqlite3 툴을 사용할 때에는 이러한 점에 유의하여 데이터베이스 파일 이름을 정확히 입력해주도록 해야 합니다.


sqlite3 프롬프트에서는 직접 SQL문을 수행하여 데이터베이스를 조회하거나 수정하는 것이 가능합니다. sqlite3 툴의 주요 명령어는 아래와 같습니다. SQL문을 제외한 모든 명령어는 '.'으로 시작합니다.

  • .table : 데이터베이스 내의 모든 테이블을 나열합니다.
  • .header on : 쿼리 결과를 표시할 때 맨 위에 열 이름을 같이 표시합니다.
  • .mode column : 쿼리 결과를 표시할 때 각 열들 사이를 적당히 띄워주어 보기 편하도록 표시합니다.
  • .exit : sqlite3 툴을 종료합니다.

아래는 주소록 데이터베이스를 sqlite3 툴을 통해 조회해본 모습입니다.

* 모든 테이블 조회



* 특정 테이블 내의 내용 조회 (.header on, .mode column)