AndroidのIO - SQLiteOpenHelperクラス
実際にSQLiteDatabaseのメソッドを使ってSQLiteDatabaseオブジェクト取得は煩雑のためお勧めしない。
通常はAndroidが提供するSQLiteOpenHelperクラスを使う。
SQLiteOpenHelperのメソッド
- synchronized SQLiteDatabse getReadableDatabase()
- synchronized SQLiteDatabse getWritableDatabase()
- abstract void onCreate(SQLiteDatabase db)
- abstract void onUpgrade(SQLiteDatabase db)
- synchronized void close()
開発者は下記メソッドを定義すればいい。
abstract void onCreate(SQLiteDatabase db) :
getReadableDatabase(),getWritableDatabase()実行する際にDBがなければAndroidはDBを自動生成する。 その後、onCreate()が呼ばれる。 主にテーブル生成、マスタデータなどを実装する。abstract void onUpgrade(SQLiteDatabase db) : アプリバージョンアップ時使用する
サンプルコード
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:weightSum="1"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textMultiLine" android:ems="10" android:id="@+id/insertText" /> <Button android:id="@+id/insert" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="insert" android:textAllCaps="false" android:textSize="20dp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textMultiLine" android:ems="10" android:id="@+id/selectText" android:layout_gravity="center_horizontal" /> <Button android:id="@+id/select" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="select" android:textAllCaps="false" android:textSize="20dp" /> </LinearLayout>
package com.example.liguofeng.sqliteopenhelpersample; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.text.SimpleDateFormat; import java.util.Date; public class MainActivity extends AppCompatActivity { MySQLiteOpenHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new MySQLiteOpenHelper(this, "Dictionary.db3", null, 1); // insertボタン ((Button) findViewById(R.id.insert)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String insertWord = ((EditText) findViewById(R.id.insertText)).getText().toString(); if (!"".equals(insertWord)) { // 単語登録 insertWord(dbHelper.getWritableDatabase(),insertWord); Toast.makeText( MainActivity.this, insertWord + "を登録しました。", Toast.LENGTH_SHORT) .show(); } } }); // selectボタン ((Button) findViewById(R.id.select)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String selectWord = ((EditText) findViewById(R.id.selectText)).getText().toString(); if (!"".equals(selectWord)) { // 単語登録 Cursor cursor = dbHelper.getReadableDatabase().rawQuery( "select count(*) as count from dict where word = ? " , new String[]{selectWord} ); int count = 0; while(cursor.moveToNext()) { count = cursor.getInt(cursor.getColumnIndex("count")); break; } if (count > 0) { Toast.makeText( MainActivity.this, "データあり", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText( MainActivity.this, "データなし", Toast.LENGTH_SHORT) .show(); } } } }); } // insert private void insertWord(SQLiteDatabase db, String word) { db.execSQL("insert into dict values(null, ?)", new String[]{word}); } @Override protected void onDestroy() { super.onDestroy(); if (dbHelper != null) { dbHelper.close();; } } }