태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

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

2010.02.15 14:09

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

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


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

  1. Blog Icon
    크학

    안녕하세요~
    좋은 정보 잘 보면서 공부하고 있는데요~

    전화번호부 DB를 조회하고자 했는데,
    permission denied 가 뜨네요.

    프롬프트 모양도 #이 아니라 $ 이구요.
    어떻게 루트 권한을 얻는지 좀 알려주세요~~ ^^

  2. 모토로이 사용하고계신건가요?
    모토로이는 현재 루트권한이 획득되지 않았습니다.

    저는 T-Mobile G1도 같이 사용중이여서 G1은 루팅시켜 사용중입니다.
    전화부 db 구조를 보고싶으시다면 에뮬레이터로 접근하셔서 보셔도 됩니다~

  3. Blog Icon
    크학

    아!
    모토로이로 연결되어서 그랬군요~~
    답변 감사합니다!!

  4. Blog Icon
    levantor

    안녕하세요 항상 잘 보고 있는 학생입니다.

    디자이어도 루트권한을 못 얻나요? 루팅을 해야하나요? 저는 캘린더 db구조를 볼려구 하거든요 ㅠ

  5. 네. DB구조를 보시려면 루팅을 하셔야합니다 :)

  6. Blog Icon
    너부리몽

    제목이 오타 ㅜㅜ 테이터베이스라고 되어있네요~ 데이터 베이스로 바꿔놓으시면 좋겠어요~ ^^

  7. 수정했습니다 :) 감사합니다!

  8. Blog Icon
    viola

    sqlite3 가 없다는데요.. 없을 수가 없지 않나요? 루트폴더에서 find . sqlite3 -print 를 했는데요 없다네여... 혹시 조언해주실 수 있을까요?

  9. 레퍼런스 폰이 아닌 단말은 없을수도 있습니다. :(

  10. Blog Icon
    김규현

    책 잘보고 있습니다 ^^ 정말 많은 도움이 되네요

    저는 갤럭시 에스 2를 쓰고 있는데, 제가 만든 어플리케이션의 db를 보고싶으면

    어떤 방법이 있을까요? adb shell을 이용해서 pm setInstallLocation 2 를 입력하면

    설치위치가 바뀐다는데 ㅠ 그렇게 하니깐 설치가 안되네여 ,,,

    어떻게 하면 sd카드에 설치가 가능한가요?