Android

[안드로이드 스튜디오] 데이터베이스 인스펙터를 사용하여 Sqlite DB조회 및 데이터 수정하는 방법

안드로이드 스튜디오 4.1 이상의 버전을 사용하는 경우 , 데이터베이스 인스펙터를 사용하여 앱 실행 중에 DB를 조회하거나 수정할 수 있습니다. 데이터베이스 디버깅시 유용하게 사용할 수 있으며, 또는 쿼리문 테스트를 해볼 수 있습니다. Database Inspector는 SQLite를 기반으로 빌드된 라이브러리(예:Room) 및 일반 SQLite를 사용한 작업을 지원합니다.

한가지 참고해야할 사항은, API 26이상에서 지원하며, SQLite라이브러리에서만 동작합니다.

 

데이터베이스 인스펙터(Database Inspector) 실행 방법

1. API 26이상를 실행하는 에뮬레이터에서 앱을 실행하거나 테스트할 스마트폰을 연결해서 앱을 실행합니다.

2. 상단 메뉴바에서 View > Tool Windows > Database Inspector를 선택합니다.


3. 현재 실행 중인 앱의 데이터베이스가 Database Inspector창에 나타납니다. 


 

데이터베이스 인스펙터(Database Inspector) 사용방법 

본인이 생성한 DB파일 이름(DIET_DB.db)를 클릭하면 생성한 테이블 리스트가 나열됩니다.  테이블 이름(TB_WERIGHT_DIET)을 클릭하면 테이블에 저장된 데이터 리스트가 나타나며, 원하는 위치의 칼럼의 값을 클릭하여 직접 데이터 수정이 가능합니다. Live updates 옆에 체크박스를 체크하면 앱에서 변경되는 데이터 혹은 추가되는 데이터를 실시간으로 확인할 수 있어요. 실시간 확인이 필요없는 경우, 리프레시 스키마 버튼을 클릭하면 됩니다.


 

테이블 스키마 확인하는 방법

테이블 이름 옆에 “>” 클릭하면 데이터베이스 칼럼이름과 속성등의 스키마 정보를확인할 수 있습니다.


 

맞춤 SQL 쿼리 실행방법(직접 쿼리 날리기)

앱이 실행되는 동안 앱의 데이터베이스에서 쿼리를 실행할 수 있습니다. 코딩된 쿼리가 아닌, 내가 원하는 데이터를 조회하기 위한 쿼리를 날려봅시다. (오렌지 툴이나 두꺼비 툴 없어도 그냥 쓸만해요 ㅎㅎㅎㅎ) 데이터베이스 인스펙터 창 상단에 있는 독보기(Open New Query Tab) 버튼을 클릭합니다.


조회 또는 수정하고자하는 쿼리문을 작성 후 RUN버튼을 클릭합니다.


히스토리 아이콘(Show Query History) 버튼을 클릭하면 쿼리문 작성 히스토리가 나타나며 바로 선택하여 실행할 수 있습니다. 히스토리 탭에 표시되는 쿼리 결과는 읽기 전용이며 수정할 수 없습니다.  


 

DAO 쿼리 실행하기

앱이 Room을 사용하는 경우 Android 스튜디오는 DAO 클래스에 이미 정의된 쿼리 메서드를 빠르게 실행할 수 있는 거터 작업을 제공합니다. 이 작업은 앱이 실행되는 동안 사용할 수 있으며 Database Inspector는 IDE에서 열립니다. @Query 주석 옆에 있는 Run SQLite statement in Database Inspector 버튼을 클릭하여 DAO에서 쿼리 메서드를 실행할 수 있습니다.


DAO 쿼리 거터 작업

앱에 데이터베이스가 두 개 이상 있는 경우 Android 스튜디오에서는 쿼리할 데이터베이스를 드롭다운 목록에서 선택하라는 메시지가 표시됩니다. 쿼리 메서드에 명명된 결합 매개변수가 포함된 경우 Android 스튜디오는 쿼리를 실행하기 전에 각 매개변수의 값을 요청합니다. 쿼리 결과가 검사기 창에 표시됩니다.

 

Database Inspector를 종료하는 방법


Database Inspector 창에서 디바이스 리스트를 클릭(device list dropdown in top-left corner) 후 Stop Inspector를 클릭합니다.

 

데이터베이스 인스펙터 내 데이터베이스가 닫혀 있는 경우(Database Inspector closed)

저는 테스트 과정에 경고 메세지가 노출 됩니다. 사용하지 않는 db파일인데… google_app.measurement_local.db는 닫혀있는 상태(Closed)입니다. 작업하는데 문제가 없어서 무시했습니다.

Error reading Sqlite database: Database 'LiveSqliteDatabaseId
(path=/data/data/com.management/databases/google_app_measurement_local.db
, name=google_app_measurement_local.db, connectionId=1) not found

본인이 만든 데이터베이스가 닫혀있다면 아래 방법으로 해결해보세요.

 

Android Studio Database Inspector always showing database as “closed”

I am trying to use Database Inspector in Android Studio. Why I run the app on the device, it inspector is always showing my application database (highlighted in the image) as “closed”. Is…

stackoverflow.com

 

오프라인 모드

Android 스튜디오 4.2 이상에서는 프로세스 연결이 해제된 후에도 앱의 데이터베이스를 계속 검사할 수 있습니다. 이를 통해 비정상 종료 후 앱을 디버그하기가 더 쉬워집니다.

연결이 해제되면 Database Inspector가 데이터베이스를 다운로드하여 오프라인 모드로 데이터베이스를 사용할 수 있게 만듭니다. 오프라인 상태에서 테이블을 열고 쿼리를 실행할 수 있습니다.

실시간 앱 프로세스에 다시 연결되면 Database Inspector는 오프라인 모드를 종료하고 기기에 있는 데이터만 표시합니다. 즉, 오프라인 모드에서 표시된 데이터는 앱 프로세스에 다시 연결될 때 유지되지 않습니다. 이러한 제한으로 인해 Database Inspector에서는 오프라인 모드에서 데이터를 수정하거나 수정 SQL 문을 실행할 수 없습니다.

 

데이터베이스 연결 열어 두기

Database Inspector는 앱이 데이터베이스와 실시간 연결을 유지하는 동안에만 데이터베이스를 수정할 수 있습니다. 따라서 앱이 데이터베이스에 자주 연결되거나 연결이 해제되는 경우 데이터베이스를 검사하기 어려울 수 있습니다. Databases창에서는 아이콘을 통해 열린 데이터베이스()와 닫힌 데이터베이스()가 식별됩니다.

Databases창 상단에 있는 Keep database connections open을 해제()에서 설정으로 전환하면 데이터베이스 연결이 닫히는 것을 방지할 수 있습니다.

 

 

[관련 글 더보기]

 

Database Inspector

Creating and managing local databases is a core component of most mobile apps. But whether you’re using SQLite directly or through the…

medium.com