新人成長記録15th

今回は、DB(DataBase)について書いていきます

DBは一定の形式で作成された大量のデータを保持する時に使用します
AndroidのDBにはSQLiteが使われているので、クエリを書く際にはSQLiteに則った記述をする必要があります

DBとTableの作成

初めに、DBを作成するところから始まります
作成するためには、SQLiteOpenHelperを拡張した独自クラスを作成します
以下が作成した、独自クラスになります

コンストラクタで親クラスに渡す引数は4つあります
第1引数:Context(インスタンス生成時に引数にしたcontextをそのまま流用)
第2引数:String(DBの名前)
第3引数:CursorFactory(selectなどでCursorが生成される時に独自クラスの使用ができる、基本的にはnull)
第4引数:int(DBのバージョンを指定)

SQLiteOpenHelperを拡張したことで実装しなければならないライフサイクルは2つあります
onCreate:インスタンス生成時にDBが存在しなければ呼ばれます
onUpgrade:DBのバージョンが変更されると呼ばれます

DBの使用

作成したDBを使用する時には、以下のような記述になります

読み書きをする時(DELETE/INSERT/UPDATE/SELECT)は、getWriteableDatabase()メソッドでオブジェクトを取得します
読み込みのみの時(SELECT)は、getReadableDatabase()メソッドでオブジェクトを取得します

Tableの操作

先ほど取得したSQLiteDatabaseオブジェクトを使用して、Tableから情報を取得したいと思います
Tableには何も入っていないので、まずはinsertしましょう

insertの引数は3つです
第1引数:String(テーブル名)
第2引数:String(null値が許されていない場合に、代わりに挿入する値)
第3引数:ContentValues(挿入する値を保持するオブジェクト)

次に、挿入したレコードを編集したくなります
その時は、Updataを使用します

updataの引数は4つです
第1引数:String(テーブル名)
第2引数:ContentValues(挿入する値)
第3引数:String[](変更を加えるレコードの条件)
第4引数:String[](変更を加えるレコードの条件の?部分の配列)
deleteもupdataと似たようなもので、第2引数の挿入する値がなく3つの引数からなります

最後にレコードの抽出をqueryで行います

queryの引数は7つですが、8つのものもあります
第1引数:String(テーブル名)
第2引数:String[](取得するカラム名)
第3引数:String(取得するレコードの条件)
第4引数:String[](取得するレコードの条件の?部分の配列)
第5引数:String(グループ化するカラム名)
第6引数:String(グループ化した後の条件)
第7引数:String(並び替えるカラム名)
第8引数:String(取得するレコードの上限)※なくても可

queryの場合は、Cursorが取得でき、レコード情報が含まれています
対象レコードが0件の時は、null値となります
Cursorクラスのget(カラム番号)でレコードから情報が取得できます
レコードが複数件ある時は、moveToNext()で次のレコードへ移動します
不要になったCursorはclose()で閉じます

最後に、SQLiteDatabaseオブジェクトのclose()も忘れないようにしましょう

終わりに

DBは大量のデータを保存出来て便利で、規模の大きいシステムなどは多くのユーザが参照や変更を行います
DBに多くのユーザーが同時にアクセスする場合には、変更中のデータには触って欲しくないものです
変更中のデータに変更を加えられるとデータが壊れています可能性があるからです
そういった時に、排他的な処理をしてくれるものに、トランザクションがあります
次回は、このトランザクション処理を書きたいと思います

火曜日担当:poppy



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム