Database Inspector を使用してデータベースをデバッグする

Database Inspector を使用すると、アプリの実行中にアプリのデータベースの検査、クエリ、変更を行えます。これは、データベースのデバッグで特に役立ちます。Database Inspector は、プレーン SQLite や、Room などの SQLite の上に構築されたライブラリで動作します。

Database Inspector を開く

Database Inspector でデータベースを開く手順は次のとおりです。

  1. API レベル 26 以上を搭載したエミュレータまたは接続済みデバイスでアプリを実行します。

  2. メニューバーで、[View] > [Tool Windows] > [App Inspection] を選択します。

  3. [Database Inspector] タブを選択します。

  4. メニューから、実行中のアプリプロセスを選択します。

  5. [Databases] ペインに、現在実行中のアプリのデータベースが表示されます。検査するデータベースのノードを開きます。

データを表示、変更する

[Databases] ペインには、アプリのデータベースのリストと、各データベースに含まれるテーブルが表示されます。テーブル名をダブルクリックすると、図 1 に示すように、そのデータがインスペクタ ウィンドウの右側に表示されます。列見出しをクリックすると、その列の値でインスペクタ ウィンドウのデータを並べ替えることができます。

[Database Inspector] ウィンドウのスクリーンショット。
図 1. [Database Inspector] ウィンドウ

テーブルのデータを変更する手順は次のとおりです。

  1. セルをダブルクリックします。
  2. 新しい値を入力します。
  3. Enter キーを押します。

アプリで Room を使用し、UI で(LiveDataFlow などで)データベースを監視している場合、データに加えた変更は実行中のアプリにすぐに表示されます。それ以外の場合は、変更されたデータを次にアプリがデータベースから読み取ったときに初めて、変更が表示されます。

自動のデータベース変更を確認する

実行中のアプリを操作したときに Database Inspector に表示されるデータが自動的に更新されるようにするには、インスペクタ ウィンドウの上部にある [Live updates] チェックボックスをオンにします。自動の更新が有効になっているとき、インスペクタ ウィンドウのテーブルは読み取り専用になり、値の変更はできません。

データを手動で更新するには、インスペクタ ウィンドウの上部にある [Refresh table] ボタンをクリックします。

データベースにクエリを実行する

Database Inspector は、アプリの実行中にアプリのデータベースに対してクエリを実行できます。アプリで Room を使用している場合は DAO クエリを使用できますが、カスタム SQL クエリもサポートされています。

DAO クエリを実行する

アプリで Room を使用している場合、Android Studio では、DAO クラスで定義したクエリメソッドをすばやく実行できるガター アクションが提供されます。これらのアクションは、アプリが実行中で Database Inspector が IDE で開いているときに使用できます。

DAO でクエリメソッドを実行するには、@Query アノテーションの横にある Database Inspector で SQLite ステートメントを実行するボタン をクリックします。

DAO ガター アクションのスクリーンショット。
図 2. DAO クエリ ガター アクション

アプリに複数のデータベースが含まれている場合は、Android Studio により、クエリを実行するデータベースをリストから選択するよう求めるプロンプトが表示されます。クエリメソッドに名前付きバインド パラメータが含まれている場合は、Android Studio により、クエリを実行する前に各パラメータの値が要求されます。クエリ結果がインスペクタ ウィンドウに表示されます。

カスタム SQL クエリを実行する

Database Inspector を使用すると、アプリの実行中にアプリのデータベースに対してカスタム SQL クエリを実行することもできます。

データベースにクエリを実行する手順は次のとおりです。

  1. [Databases] ペインの上部で [Open New Query tab] ボタン をクリックし、インスペクタ ウィンドウで新しいタブを開きます。

    [New Query] タブボタンを示すスクリーンショット。
    図 3. [New Query] タブを開く
  2. アプリに複数のデータベースが含まれている場合は、[New Query] タブのリストから、クエリを実行するデータベースを選択します。

  3. [New Query] タブの上部にあるテキスト フィールドに、カスタム SQL クエリを入力します。

  4. [Run] をクリックします。

または、クエリ履歴機能を使用して、以前に使用したクエリを実行します。

  1. クエリ履歴表示ボタン クエリ履歴表示ボタン
をクリックすると、選択されているデータベースに対して以前実行したクエリのリストが表示されます。

    クエリ履歴のプルダウンを示すスクリーンショット。
    図 4. クエリ履歴メニュー
  2. リスト内のクエリをクリックするとエディタにクエリ全体のプレビューが表示され、Enter キーを押すとエディタにコピーされます。

  3. [Run] をクリックしてステートメントを実行します。

[New Query] タブに表示されるクエリ結果は読み取り専用であり、変更できません。ただし、カスタム SQL クエリ フィールドを使用して、UPDATEINSERTDELETE などの修飾子ステートメントを実行することは可能です。

アプリで Room を使用し、UI で(LiveDataFlow などで)データベースを監視している場合、データに加えた変更は実行中のアプリにすぐに表示されます。それ以外の場合は、変更されたデータを次にアプリがデータベースから読み取ったときに初めて、変更が表示されます。

オフライン モード

Android Studio 4.2 以降では、プロセスが切断された後でも引き続きアプリのデータベースを検査できます。これにより、クラッシュ後のアプリのデバッグが容易になります。

切断が発生すると、Database Inspector はデータベースをダウンロードして、オフライン モードで利用できるようにします。オフラインの場合でも、テーブルを開いてクエリを実行できます。

ライブ アプリプロセスに再接続すると、Database Inspector はオフライン モードを終了し、デバイス上のデータのみを表示します。つまり、アプリプロセスに再接続したとき、オフライン モードで表示されるデータは保持されません。この制限のため、Database Inspector では、オフライン モード中にデータを編集することや変更 SQL ステートメントを実行することはできません。

オフライン モードでデータベースを表示しているときは、インスペクタのプロセスへの接続が切断されたことを示すために、プロセス名に [DETACHED] が付加されます。また、図 5 のように、データベース アイコン オフラインのデータベース によってオフライン状態が示されます。

オフライン モードの Database Inspector
図 5. オフライン モードの Database Inspector

データベース接続を開いたままにする

Database Inspector は、アプリがデータベースへのライブ接続を維持しているときにしか、データベースを変更できません。つまり、アプリがデータベースに対して接続と切断を頻繁に行う場合、それらのデータベースのデバッグが難しくなることがあります。[Databases] ペインでは、アイコンによって、開いている()データベースと閉じているデータベース()が区別されます。

また、データベース接続が終了しないようにするには、[Databases] ペインの上部にある [Keep database connections open] をオフ からオン に切り替えます。

Database Inspector からデータをエクスポートする

Database Inspector からデータベース、テーブル、クエリ結果をエクスポートして、ローカルで保存、共有、再作成することができます。Android Studio でアプリ プロジェクトを開き、Database Inspector でそのプロジェクトのアプリを検査する際に、次のいずれかの方法でデータのエクスポートを開始できます。

  • [Databases] パネルでデータベースまたはテーブルを選択し、パネルの上部付近にある [Export to file] をクリックします。
  • [Databases] パネルでデータベースまたはテーブルを右クリックし、コンテキスト メニューから [Export to file] を選択します。
  • タブのテーブルまたはクエリ結果を調べるときは、テーブルまたはクエリ結果の上にある [Export to file] をクリックします。

エクスポート アクションを選択したら、図 6 に示すように、[Export Database] ダイアログを使用して最後の数ステップを実施できます。

データベース、テーブル、クエリ結果のいずれをエクスポートするかに応じて、DB、SQL、CSV のうち 1 つ以上の形式でデータをエクスポートできます。

[Export Database] ダイアログ ボックス

図 6. [Export Database] ダイアログ

参考情報

Database Inspector の詳細については、以下の参考情報をご覧ください。

ブログ投稿

動画