スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Android SQLiteの作成・データの永続化

SQLiteによるデータの永続化


Androidに搭載されているSQLiteについての操作方法を記載します。

・データベースを作成クラスでは、SQLiteOpenHelperを継承し、
 必要なメソッドをオーバーライドします。

・データベースに対しての操作を行うクラスでは、DAOクラスを導入します。
 insert、updateメソッドを実装します。

以下にサンプルを記述
今回はDB、テーブルの作成、データの登録・参照のサンプルとなります。


SQLiteを利用するActivityクラス        

○AndroSQLiteアクティビティクラス

package andro.sqlite;

import java.util.List;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class AndroSQLite extends Activity {
/** Called when the activity is first created. */@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

  // prefectureSQLiteHelperのコンストラクタ呼び出し
PrefectureSQLiteHelper dbHelper = new PrefectureSQLiteHelper(this);①
SQLiteDatabase db = dbHelper.getWritableDatabase();②

// prefectureDao コンスト呼び出し③
PrefectureDao prefDao = new PrefectureDao(db);

Prefecture pf = new Prefecture();④
pf.setName("青森");
pf.setCode("10");
prefDao.insert(pf);

pf = new Prefecture();
pf.setName("東京");
pf.setCode("20");
prefDao.insert(pf);

List < Prefecture > list = prefDao.findAll();⑤

db.close();⑥

StringBuilder lines = new StringBuilder();
for (Prefecture p: list) {
lines.append(p.getName());
lines.append("|");
lines.append(p.getCode());
lines.append(System.getProperty("line.separator"));
}

TextView tv = new TextView(this);⑦
tv.setText(lines.toString());
setContentView(tv);
}
}

①SQLiteOpenHelperを実装したPrefectureSQLiteHelperを生成
②getWritableDatabase()メソッドを実行してSQLiteDatabaseを取得する。
  SQLiteHelperのonCreate()メソッドが実行される。
③操作用DAOクラスを生成します。
④データ格納用クラスのPrefectureクラスを生成します。
 値設定後、操作用DAOクラスのInsertメソッドを実行します。
⑤DAOクラスのfindAll()で、現在登録されている全項目を抽出する
⑥DBを閉じます。
⑦画面表示用のTextViewwを生成


SQLiteOpenHelperを実装するクラス      
○PrefectureSQLiteHelperクラス

package andro.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

//SQLiteOpenHelperを継承し独自Helperクラスを生成
public class PrefectureSQLiteHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "PREFECTURE"; // データベース名 ①
private static final int DATABASE_VERSION = 1; // スキーマバージョン

// テーブル作成用SQL
private static final String CREATE_TABLE_SQL =
" create table prefecture (name text primary key,code text)";②
private static final String DROP_TABLE_SQL = "drop table if exists prefecture";

public PrefectureSQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);③
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_SQL); // テーブル作成用SQL実行 ④
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {⑤
}
}

①作成するデータベース名
②テーブル作成用のCreate文
③コンストラクタにてsuperクラスにデータベース名、スキーマを設定する
④onCreateメソッドにて、execSQLを実行します。
 execSQLはSELECT以外のSQLを実行します。
⑤onUpgradeメソッドでは、既存のテーブル削除後にonCreateで新たにテーブルを作成します。
 今回は省略します。

データ操作用のDAOクラス          

○PrefectureDaoクラス

package andro.sqlite;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

//データ操作用クラス
public class PrefectureDao {
private static final String TABLE_NAME = "prefecture";①
private static final String COLUMN_NAME = "name";
private static final String COLUMN_CODE = "code";
private static final String[] COLUMNS = {
COLUMN_NAME, COLUMN_CODE
};

private SQLiteDatabase db;

/**
* コンストにてSQLiteDatabaseを引数とする

* @param db
*/
public PrefectureDao(SQLiteDatabase db) {
this.db = db;②
}

public long insert(Prefecture pref) {
ContentValues values = new ContentValues();③
values.put(COLUMN_NAME, pref.getName());
values.put(COLUMN_CODE, pref.getCode());
return db.insert(TABLE_NAME, null, values);
}

public long update(Prefecture pref) {
ContentValues values = new ContentValues();
values.put(COLUMN_NAME, pref.getName());
values.put(COLUMN_CODE, pref.getCode());
String whereClause = "name = " + pref.getName();④
return db.update(TABLE_NAME, values, whereClause, null);
}

public List < Prefecture > findAll() {
List < Prefecture > list = new ArrayList < Prefecture > ();
Cursor cursor = db.query(TABLE_NAME, COLUMNS, null, null, null, null, ⑤
COLUMN_CODE);
while (cursor.moveToNext()) {⑥
Prefecture pref = new Prefecture();
pref.setName(cursor.getString(0));
pref.setCode(cursor.getString(1));
list.add(pref);
}
return list;
}

public Prefecture findByName(String name) {⑦
String selection = " name = " + name;
Cursor cursor = db.query(TABLE_NAME, COLUMNS, selection, null, null,
null, null);
while (cursor.moveToNext()) {
Prefecture pref = new Prefecture();
pref.setName(cursor.getString(0));
pref.setCode(cursor.getString(1));
return pref;
}
return null;
}

public int delete(String name) {⑧
return db.delete(TABLE_NAME, " name = " + name, null);
}
}

①作成したテーブル名、列名、列名を配列かしたString配列を設定
②コンストラクタにてSQLiteDatabeseを設定
③Insert用にContentValuesオブジェクトを使用する。
 putメソッドでKey、Value設定を行う。
④更新条件としてnameに条件を指定する。
⑤queryメソッドで条件を指定しデータを取得します。
 検索結果はCursorで戻します。
⑥Cursorから結果を取得し、データ格納クラス(Prefecture)へ値を設定しリスト化する。
⑦条件を指定してデータを検索します。
⑧削除メソッド


データ格納クラス              
○Prefectureクラス

package andro.sqlite;

public class Prefecture {

private String name = "";
private String code = "";

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

}



■実行結果
20121124_194313.jpg
スポンサーサイト

テーマ : android
ジャンル : コンピュータ

コメントの投稿

非公開コメント

おすすめアプリ
カテゴリ
最新記事
リンク
アクセスカウンター
アクセス解析
imobile
i-mobile
i-mobile
i-mobile
i-mobile
i-mobile
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Amazon
Androidお勧め参考書
EC studio
商品
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。