Android Sqliteデータベース


1.概要
       SQLiteは、軽いデータベースであり、ACID(原子性、一貫性、分離性、持久性)に準拠した関連データベース管理システムであり、組み込み開発に多く利用されています。SQLiteのデータタイプ:Typeness(タイプなし)は、任意のタイプのデータを保存できます。保存したいテーブルの任意の列に保存します。しかし、よくあるタイプをサポートします。例えば、NULL、VANRCHARR、TEXT、INTEGER、BLOB、CLOB…など。唯一の例外:integer prmaryこのフィールドは64ビットの整数しか記憶できません。
       Androidシステムでは、データベースバージョンを管理するためのSQLiteOpenHelper抽象クラスを提供しています。
          onCreate  データベース作成時に実行します(データベースオブジェクトの最初の接続時に実行します)
          onUpgrade  データベース更新時に実行します(バージョン番号変更時に実行します)
          オーペン  データベースを開くたびに実行します。データベースを開くたびに呼び出します。  onCreate、onUpgrade方法の後)
2.API
AndroidはSQLiteDatabaseというクラスを提供しています。このクラスはいくつかのオペレーティングデータベースのAPIをカプセル化しています。このクラスを使ってデータの追加(Create)、クエリ(Retrieve)、更新(Update)、削除(これらの操作を単にCRUDといいます)を完了できます。SQLiteDatabaseの学習に対して、我々はexecSQL()とrawQuery()の方法を重点的に把握すべきです。execSQL()方法はinsert、delete、udate、CREATE TABLEなどの変更行為があるSQL文を実行できます。rawQuery()メソッドはselect文を実行するために使用されます。
   execSQL()方法の使用例:
SQLiteDatabase db = ....;
   db.execSQL("insert into person(name, age) values('MINE', 4)");
   db.close();
 
上記のSQL文を実行すると、personテーブルに記録が追加されます。実際のアプリケーションでは、文の「ポッドキャスト」というパラメータ値はユーザー入力画面によって提供されます。ユーザーが入力した内容をそのままにして上記のinsert文にセットすれば、ユーザーが入力した内容に単引用符が含まれている場合、グループが綴ったSQL文に文法エラーがあります。この問題を解決するには、シングルクォーテーションマークを2つのシングルクォーテーションマークに変換する必要があります。いくつかの場合、ユーザーはしばしば「&」のような特殊なSQL記号を入力して、グループがよく戦うSQL文の文法が正しいことを保証するために、SQL文の中のこれらの特殊なSQL記号に対して変換しなければなりません。明らかに、SQL文ごとにこのような処理が煩雑です。SQLiteDatabase類は、重載後のexecSQL(String sql、Object[]bindAgs)法を提供し、この方法を使用すると、前述の問題を解決することができます。この方法はプレースホルダパラメータ(?)を使用することをサポートします。使用例は以下の通りです。
SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"MINE", 4});
db.close();
execSQL(String sql,Object[]bindArgs)メソッドの最初のパラメータはSQL文であり、第二のパラメータはSQL文の中のプレースホルダパラメータの値であり、パラメータ値は配列中の順序はプレースホルダの位置に対応します。
   SQLiteDatabaseのrawQuery()はselect文を実行するために使用されます。使用例は以下の通りです。
SQLiteDatabase db = ....;
Cursor cursor = db.rawQuery(“select * from person”, null);
while (cursor.moveToNext()) {
  int personid = cursor.getInt(0); //       ,       0  
  String name = cursor.getString(1);//       
  int age = cursor.getInt(2);//       
}
cursor.close();
db.close();
rawQuery()メソッドの最初のパラメータはselect文です。第二のパラメータは、select文のプレースホルダパラメータの値です。select文にプレースホルダが使用されていない場合、このパラメータはnullに設定できます。プレースホルダ付きのselect文の使用例は以下の通りです。
Cursor cursor = db.rawQuery("select * from person where name like ? and age=?", new String[]{"MINE", "4"});
Currsorは結果集の遊覧標識で、結果集をランダムに訪問するために用いられます。jdbcに詳しいなら、CursorとJDBCのResultSetの役割は似ています。moveToNext()メソッドを使用して、現在の行から次の行に移動できます。結果セットの最後の行を移動した場合、結果はfalseです。そうでなければtrueです。また、Curserは、現在の行から前の行に移動するためによく使用されるmoveToProvious方法もあります。結果セットの最初の行を移動した場合、戻り値はfalseであり、そうでなければtrueであります。moveToFirst()方法は、(遊覧標識を結果セットの最初の行に移動させるために使用されます。結果セットが空であれば、戻り値はfalseです。そうでなければ、trueおよびLavest(true)。(ラベルを結果セットの最後の行に移動します。結果セットが空なら、戻り値はfalseです。そうでなければtrueです。)
3その他:
   execSQL()とrawQuery()の方法のほかに、SQLiteDatabaseは追加、削除、更新、クエリに対応する操作方法を提供しています。
  insert()  データを追加
  delete()  データを削除
  udate()  データの変更
  query()  クエリデータ
  これらの方法は実際にはSQLの文法をよく知らない開発者に使われています。SQLの文法に詳しいプログラマにとっては、直接execSQL()とrawQuery()の方法を使ってSQL文を実行すれば、データの追加、削除、更新、照会操作ができます。