まず最初にSQLiteOpenHelperを継承したクラスを作成します。
public class ClientsDbHelper extends SQLiteOpenHelper { /** データベースのバージョン */ public static final int DB_VERSION = 1; // データベーススキーマを変更した場合、インクリメントする。 /** データベースファイル名 */ public static final String DB_NAME = "clients.db"; public ClientsDbHelper(Context context) { // SQLiteOpenHelperクラスのコンストラクタには // データベースのバージョンを渡す。 // コンストラクタに渡したバージョンと // データベースが保持しているバージョンが異なる場合、 // onUpgrade()、またはonDowngrade()が呼ばれる。 super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // データベースが作成された時に呼び出される。 // ここでデータベースの初期化(テーブルの作成やテーブルの初期化等)を行う。 final String createSql = "CREATE TABLE clients(" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name TEXT" + ")"; try { db.execSQL(createSql); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // データベースをアップグレードする必要がある場合に呼び出される。 // ここでデータベースを新バージョンにアップグレードする処理を行う。 // 以下は、既存データはすべて破棄しても良い場合の処理例 db.execSQL("DROP TABLE clients"); // 旧バージョンのテーブルを破棄 onCreate(db); // 新バージョンでテーブルを作成し直す } }onDowngrade()の実装は必須ではないので、必要な場合は実装します。
データを挿入する。
データの挿入は、SQLiteDatabase.execSQL()でSQLのINSERT文を実行する方法と
SQLiteDatabase.insert()を使う方法があります。
以下はinsert()を使う場合のコードです。
SQLiteDatabase.insert()を使う方法があります。
以下はinsert()を使う場合のコードです。
// ContentValuesに列名と値を設定 ContentValues values = new ContentValues(); values.put("name", "Taro"); try { // データベースを書き込み用で開く ClientsDbHelper dbHelper = new ClientsDbHelper(getApplicationContext()); SQLiteDatabase db = dbHelper.getWritableDatabase(); db.insert("clients", null, values); // 挿入先テーブルを指定して挿入 // ↑の場合、valuesが空だとinsert()が例外をスローする。 // これを防ぐには、次のようにnullColumnHackを指定する。 // db.insert("clients", "name", values); } catch (SQLException e) { e.printStackTrace(); }insert()の2つ目の引数nullColumnHackには、ContentValuesが空の場合にNULLを設定する列を指定します。
SQLiteDatabaseはContentValuesが空だとinsert()に失敗(例外スロー)しますが、
nullColumnHackを指定しておくと失敗しないようにできます。
そのため、指定した列はNULLを設定できなければなりません。そうでない場合(intやNOT NULL列の場合)、insert()に失敗します。
通常、ContentValuesが空になることは無いと思うので、nullColumnHackはnullで問題ありません。
データを取得する。
データの取得は、SQLiteDatabase.rawQuery()でSQLのSELECT文を実行する方法と
SQLiteDatabase.query()を使う方法があります。
個人的な好みになりますが、rawQuery()を使った方が分かりやすく簡単だと思います。
以下はrawQuery()を使う場合のコードです。
SQLiteDatabase.query()を使う方法があります。
個人的な好みになりますが、rawQuery()を使った方が分かりやすく簡単だと思います。
以下はrawQuery()を使う場合のコードです。
final String querySql = "SELECT * FROM clients;"; ClientsDbHelper dbHelper = new ClientsDbHelper(getApplicationContext()); Cursor cursor = null; try { // データベースを読み取り専用で開く SQLiteDatabase db = dbHelper.getReadableDatabase(); // SELECT文を実行 cursor = db.rawQuery(querySql, null); // Cursorから値を取得するための列indexを取得 int idColumnIndex = cursor.getColumnIndexOrThrow("id"); int nameClumnIndex = cursor.getColumnIndexOrThrow("name"); // Cursorから値を取得 if (cursor.moveToFirst()) { do { int id = cursor.getInt(idColumnIndex); String name = cursor.getString(nameClumnIndex); // do something } while (cursor.moveToNext()); } } catch (SQLiteException e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } }
データの更新/削除も同様に、SQLiteDatabaseを使って行えます。
SQL文を実行する方法とSQLiteDatabaseのメソッドを使用する方法がありますが、
どちらの方法を使っても大差ないので、使い勝手の良い方を使うのがいいと思います。
0 件のコメント:
コメントを投稿