IntelliJ IDEA 13の新機能 - AndroidのSQLiteデータベースに直接接続してみた

IntelliJ IDEAはバージョン13からAndroidのSQLiteデータベースに直接接続できるようになりました。
これまでもAndroid端末のSQLiteデータベースの中身を参照する方法はいくつかありましたが、rootを取ったり、端末のデータベースファイルをローカルに抽出してからDatabaseツールで参照するなど、ひと手間必要な方法ばかりでした。しかしIntelliJ IDEAの新機能ではroot化の必要無しで、データベースに直接接続することができます。


## 準備

まずはテーブルにデータをinsertする簡単なアプリを作ってデータを登録し、データベースに接続してみます。

ちょうどormLiteを試していたところなのでそれをサンプルアプリとして使いました。
テキストボックスに入力した内容をwordテーブルに登録してテーブルの全内容をListViewで表示するだけの簡単アプリです。

![device-2013-12-08-160622.png](https://qiita-image-store.s3.amazonaws.com/0/3324/c887316e-0f23-662a-03ec-09f744d5c6ad.png "サンプルアプリの画面")

wordテーブルの定義は以下の通り。

| カラム | 型 | 備考 |
|:-----------|------------:|:------------:|
| id       |  INTEGER  |  AUTOINCREMENT       |
| value       | TEXT  | 入力値を保存        |

サンプルアプリはGitHubにおいてあります。

https://github.com/radiocat/ormExample



## 端末に接続

まずはサンプルアプリをUSB経由で端末に転送してインストールします。
次にDatabaseツールウィンドウの＋ボタンを押してAndroid SQLiteを選択します。

![スクリーンショット 2013-12-05 0.29.05.png](https://qiita-image-store.s3.amazonaws.com/0/3324/d05edf33-0042-58a6-679b-5b60e35ee58a.png "Databaseツールウィンドウ")

Data Sources and Driversダイアログが表示されるので対象の端末、Package名、Databaseファイル名を選択します。
当たり前ですが端末が繋がった状態でなければ設定できません。
ダイアログの下にSQLite driver missingのエラーが表示されている場合はDownloadをクリックすると自動でダウンロードされます。
![スクリーンショット 2013-12-05 2.03.48.png](https://qiita-image-store.s3.amazonaws.com/0/3324/c65a7240-3944-b7c3-dc9f-bd39efe4b1b1.png "Data Sources and Drivers")

Synchronizeボタンを押すと接続を行い、指定したデータベース内のテーブルが表示されます。
ここからは既存のDatabaseツールでおなじみのUIです。
![スクリーンショット 2013-12-05 2.05.07.png](https://qiita-image-store.s3.amazonaws.com/0/3324/5933ff45-42d6-e8bc-ee4b-112180d3dc81.png "接続時のDatabaseツールウィンドウ")

テーブルを開くと確かに中を参照することができました。
![スクリーンショット 2013-12-05 2.06.50.png](https://qiita-image-store.s3.amazonaws.com/0/3324/1cf3f119-5867-571d-cc9d-b9014ba426f6.png "テーブルの内容")

MySQLなどのデータベースに繋いだときは自動でテーブルの情報を表示してくれますがAndroid SQLiteの場合は現状ではSynchronizeボタンを押さないと表示されないようです。
とはいえ操作はとても簡単で今までに比べるとずいぶん楽です。

## データの更新

テーブルを開いて内容を直接書き換えてみます。
![スクリーンショット 2013-12-05 2.07.23.png](https://qiita-image-store.s3.amazonaws.com/0/3324/6367fcc8-97e7-2c94-f5b0-bec492300095.png "テーブルの内容書き換え")

変更した内容を端末のアプリに反映させるには右クリック→Uploadする必要があります。
![スクリーンショット 2013-12-05 2.10.38.png](https://qiita-image-store.s3.amazonaws.com/0/3324/908731fe-5b79-8e61-1421-2cb79dd6dd25.png "テーブル内容のUpload")

通常のデータベース操作よりは1アクション必要ですが、端末上のデータを直接触れるのは便利です。
もちろんデータの追加や削除も同様に行えます。

## SQLによるデータ操作

既存のDatabaseツールと同様に右クリック→ConsoleからConsoleウィンドウを立ち上げてSQLを実行することもできます。

![スクリーンショット 2013-12-05 2.15.38.png](https://qiita-image-store.s3.amazonaws.com/0/3324/b1cd0ee8-7437-5a19-f580-603482d2e6e8.png "Console")

Database ConsoleにSQLの結果が表示されます。
![スクリーンショット 2013-12-05 2.15.48.png](https://qiita-image-store.s3.amazonaws.com/0/3324/ba60cddd-7a62-1fd5-f68d-8ccbd5c4b9e3.png "Database Console")

もちろんinsert,update,deleteといった更新クエリも実行できます。

## まとめ

Android SQLiteのDatabase機能はAndroid 2.2以上の端末で実行可能とのことです。
もちろん実機だけでなくエミュレーターでも可能でした。

そのほか、IntelliJ IDEA 13からTerminal機能が利用できるようになり、OSのターミナルを起動しなくてもIntelliJの中でコマンドを発行できるようになりました。
Androidの開発ではadbコマンドなどを発行する時にターミナルを使うことがよくあるのでこの機能も地味に便利です。

![スクリーンショット_2013-12-08_16_16_21.png](https://qiita-image-store.s3.amazonaws.com/0/3324/e87e2e97-2286-3b80-a4ec-3025adf122c0.png "Terminal")

また、Android DDMSウィンドウの左上にカメラマークのアイコンが追加され、スクリーンショットを撮ることができるようになりました。
わざわざ個別にDDMSを立ち上げる必要がありません。これも地味に便利です。
![スクリーンショット 2013-12-08 16.13.57.png](https://qiita-image-store.s3.amazonaws.com/0/3324/426d6dcd-e3b2-c3f3-34bf-d9f429a7b133.png)

Database機能はUltimate Editionのみの機能ですがデザイナ機能などDatabase以外の機能も強力なのでAndroid開発者は購入して損は無いと思います。