なお、アプリケーションをアンインストールするとファイルとして作成したデータベースも自動的に削除されるので、ご安心ください。また、削除はAndroid SDKのDDMS(Dalvik Debug Monitor Service)からではなく、Androidエミュレータの[Manage Applications]から行ってください。
DDMSからアプリの削除を行うと、アプリケーションが作成したデータベースやファイルは削除されませんので、注意が必要です。
最もよく使うSQL文は、INSERT文やDELETE文、UPDATE文、SELECT文ですが、既出のSQLiteDatabase#execSQL(String)では、SELECT文は使用できません。SQLiteStatementでも同様に、SELECT文は使用できません。ほかのSQL文と異なり、SELECT文は結果を返すためです。
SELECT文を実行するには、SQLiteDatabaseに複数用意されているqueryメソッドやrawQueryメソッドを使用します。
メソッド | 説明 |
---|---|
query | 簡単な検索ならこれが使いやすい。ただし、使いにくいが複雑な検索も可能 |
rawQuery | SQL文を渡して、データもバインドできるので、複雑な検索や一部条件だけ異なる繰り返しの検索などに便利 |
表2 検索メソッド |
例えば、以下のようなSQLならrawQueryの方が断然分かりやすいですね。
// rawQueryでSELECTを実行 String sql = “select foo.a, bar.b from foo, bar where foo.a = bar.a;”; Cursor c = db.rawQuery(sql, null); // queryでSELECTを実行 String table = “foo, bar”; String[] columns = {“foo.a”, “bar.b”}; String selection = “foo.a = bar.a”; Cursor c = db.query(table, columns, selection, null, null, null, null);
検索した結果は、Cursorという形で取得できます。カーソルの概念は下の図のような感じです。
結果のリストとそのリストを指すカーソルがあって、カーソルを動かしながら結果を取り出すというような処理をします。
実際の処理を見てみましょう。
Cursor c = db.query("capitals", new String[] {"prefecture"}, null, null, null, null, null); c.moveToFirst(); CharSequence[] list = new CharSequence[c.getCount()]; for (int i = 0; i < list.length; i++) { list[i] = c.getString(0); c.moveToNext(); } c.close();
queryメソッドでカーソルを取得して、moveToFirstメソッドでカーソルを先頭に移動しています。次に、getCountメソッドで結果の数を取得し、その数分だけカーソルをmoveToNextメソッドで移動しながら、getStringメソッドで結果を取り出しています。最後に、closeメソッドでカーソルを閉じておしまいです。
Androidのデータベースの使用方法はいかがだったでしょうか? 思ったより簡単だったという印象ではないかと思います。データベースを使用すると、とても強力なデータ表現が可能になります。アイデア次第でこれまでになかったアプリケーションが作成できるようになるでしょう。
次回は、Androidアプリケーションから扱えるサービスについて解説します。楽しみにお待ちください。
Copyright © ITmedia, Inc. All Rights Reserved.