【Android】SQLiteデータベースを作成、テーブル作成、レコード抽出など


最近覚えたのでおさらいに記事にしてみます。
概ね、タイトル通りです。
Java初心者の為、表現が間違っているかもしれません、ご容赦下さい(´・ω・`)

今回は

  • データベース作成
  • テーブル作成
  • レコード追加
  • セレクト文でレコード取り出す
までやってみます。



参考にした書籍はこちら





importに追加したのはこの二行。
import android.database.*;
import android.database.sqlite.*;





データベースを作成

内部メモリにDBを作成します。
openOrCreateDatabaseの引数にファイル名を渡してDBを作成。
String dbStr = "data/data/" + getPackageName() + "/Sample.db";
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbStr,  null );






テーブルを作成


ここから先は作成したデータベースにSQL文を使ってデータを操作する形になります。

例では

idname
0名前
1名前1
2名前2

カラムはIDと名前だけのシンプルなmemberテーブルを作ってみます。


テーブル作成用のクエリを用意して、
execSQL関数で実行。これでテーブル名「membar」が作成されます。
String query_table1 = "DROP TABLE IF EXISTS menber";
String query_table2 = "CREATE TABLE menber" + " ( id INTEGER PRIMARY KEY , name  STRING ) ";
db.execSQL(query_table1);






レコードを追加


次にmemberテーブルにレコードを追加します。
先程と同じようにレコード追加用のクエリを用意して、
execSQL関数で実行します。

String query_record_set[]   =     { "INSERT INTO menber( name ) VALUES ( 'レミリア・スカーレット' ) ",
                                    "INSERT INTO menber( name ) VALUES ( '十六夜咲夜' ) ",
                                    "INSERT INTO menber( name ) VALUES ( 'パチュリー・ノーレッジ' ) ",
                                    "INSERT INTO menber( name ) VALUES ( '小悪魔' ) ",
                                    "INSERT INTO menber( name ) VALUES ( '紅美鈴' ) ",
                                    "INSERT INTO menber( name ) VALUES ( 'チルノ' ) ",
                                    "INSERT INTO menber( name ) VALUES ( 'ルーミア' ) " };

for( int i=0; i<query_record_set.length; i++){
    db.execSQL(query_record_set[i]);
}






セレクト文でレコード取り出す


レコードに追加したデータをSELECT文で取得します。
Androidでは取得したデータを取り出す時は
Cursorクラス使わないといけないみたいです。

String query_select ="SELECT * FROM menber";


Cursor cursor = db.rawQuery(query_select, null);
startManagingCursor(cursor);

String result_str = "";

while( cursor.moveToNext() ){
    int index_id    =   cursor.getColumnIndex("id");
    int index_name  =   cursor.getColumnIndex("name");
    int id          =   cursor.getInt(index_id);
    String name     =   cursor.getString(index_name);
    result_str     += "ID: " + id + " 名前:" +  name + "\n";
}






上記のソースをまとめたもの。



package sample.com.sample001;

import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.database.*;
import android.database.sqlite.*;

public class Sample001Activity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.HORIZONTAL);
        setContentView(ll);

        //データベースを作成
        String dbStr = "data/data/" + getPackageName() + "/Sample.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbStr,  null );

        //テーブル作成用のクエリ文
        String query_table1 = "DROP TABLE IF EXISTS menber";
        String query_table2 = "CREATE TABLE menber" + " ( id INTEGER PRIMARY KEY , name  STRING ) ";

        //テーブルの作成
        db.execSQL(query_table1);
        db.execSQL(query_table2);

        //レコード作成用のクエリ文(INSERT)
        String query_record_set[]   =   { 
          "INSERT INTO menber( name ) VALUES ( 'レミリア・スカーレット' ) ",
          "INSERT INTO menber( name ) VALUES ( '十六夜咲夜' ) ",
          "INSERT INTO menber( name ) VALUES ( 'パチュリー・ノーレッジ' ) ",
          "INSERT INTO menber( name ) VALUES ( '小悪魔' ) ",
          "INSERT INTO menber( name ) VALUES ( '紅美鈴' ) ",
          "INSERT INTO menber( name ) VALUES ( 'チルノ' ) ",
          "INSERT INTO menber( name ) VALUES ( 'ルーミア' ) " };

        //レコード作成
        for( int i=0; i<query_record_set.length; i++){
          db.execSQL(query_record_set[i]);
        }


        //レコード検索用のクエリ文(SELECT)
        String query_select ="SELECT * FROM menber";


        Cursor cursor = db.rawQuery(query_select, null);
        startManagingCursor(cursor);

        String result_str = "";

        while( cursor.moveToNext() ){
          int index_id    =   cursor.getColumnIndex("id");
          int index_name  =   cursor.getColumnIndex("name");
          int id          =   cursor.getInt(index_id);
          String name     =   cursor.getString(index_name);
          result_str      += "ID: " + id + " 名前:" +  name + "\n";
        }

        //内容表示用のTextView

        TextView tv = new TextView(this);
        tv.setText( result_str );
        ll.addView(tv);

    }
}


【実行結果】
sample20120616実行結果

全件表示






47行目のSELECT文を変更すると
String query_select ="SELECT * FROM menber WHERE id=5";



sample20120616実行結果

id5のみ表示



実行結果が変わります


関連記事

【Android】SQLiteデータベースを作成、テーブル作成、レコード抽出など” への1件のコメント

  1. ピンバック: 【Andoird】サンプルアプリ第2弾「巫女さんおみくじ」公開しました | 桜花満開