2010年9月10日金曜日

Android データベースにデータを書き込む(Insert、Update、Delete)

データベースの書き込みを行います。
まずAndroid SQLiteデータベースを作成するで作成した
SQLiteOpenHelperクラスを継承したDatabaseHelper.javaのインスタンスを作成します。
このDataBaseHelperインスタンスのgetWritableDatabase()メソッドでSQLiteDatabaseインスタンスを取得します。
DatabaseHelper dbHelper = new DataBaseHelper();
SQLiteDatabase db = new dbHelper.getWritableDatabase();

SQLiteDatabaseインスタンスには以下のようなメソッドがあります。
execSQL()メソッド:select以外のsql文を指定して実行します。実行に失敗した場合はSQLExceptionをスローします。
void execSQL(String sql)

execSQL()メソッド:select以外のsql文を指定して実行します。実行に失敗した場合はSQLExceptionをスローします。
引数bindArgsにはsql文でパラメータ(?で指定)に置き換わる値を指定します。指定できる値の型はbyte[]、String、Long、Doubleのみ。
void execSQL(String sql,Object[] bindArgs)

insert()メソッド:テーブルにデータを追加します。
戻り値は正常に挿入でき場合RowIDが戻り、失敗した場合は-1が戻ります。
引数tableにはテーブル名を指定します。
引数nullColumnHackにはデータを挿入する際、Null値が許されない列に値が指定されていない場合、代わりに利用される値を指定します。
引数valuesには登録レコードの列名と値がマッピングされたContentValuesインスタンスを設定します。
long insert(String table, String nullColumnHack, ContentValues values)

update()メソッド:テーブルにデータを更新します。
戻り値は正常に更新でき場合が更新したレコード数が戻り、失敗した場合は-1が戻ります。
引数tableにはテーブル名を指定します。
引数valuesには更新レコードの列名と値がマッピングされたContentValuesインスタンスを設定します。
引数whereClauseには更新対象レコードを検索するための条件を指定します。
引数whereArgsにはwhereClauseにパラメータ(?で指定)が含まれる場合に置き変わる値を指定します。不要な場合はnullを指定します。
int update(String table, ContentValues values, String whereClause, String[] whereArgs)

delete()メソッド:テーブルからデータを削除します。
引数tableにはテーブル名を指定します。
引数whereClauseには削除対象レコードを検索するための条件を指定します。
引数whereArgsにはwhereClauseにパラメータ(?で指定)が含まれる場合に置き変わる値を指定します。不要な場合はnullを指定します。
int delete(String table, String whereClause, String[] whereArgs)


データベースにデータを登録・更新・削除を行うサンプルコードです。
MainActivty.java
package my.study.android;  

import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
   
    /* InsertボタンのClickリスナー */
    private OnClickListener buttonInsert_ClickListener = new OnClickListener(){
        public void onClick(View v) {buttonInsert_Click(v);}};
    /* UpdateボタンのClickリスナー */
    private OnClickListener buttonUpdate_ClickListener = new OnClickListener(){
        public void onClick(View v) {buttonUpdate_Click(v);}};
    /* DeleteボタンのClickリスナー */
    private OnClickListener buttonDelete_ClickListener = new OnClickListener(){
        public void onClick(View v) {buttonDelete_Click(v);}};
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //ボタンにClickリスナーを設定する。
        Button buttonInsert = (Button)this.findViewById(R.id.buttonInsert);
        buttonInsert.setOnClickListener(buttonInsert_ClickListener);
        Button buttonUpdate = (Button)this.findViewById(R.id.buttonUpdate);
        buttonUpdate.setOnClickListener(buttonUpdate_ClickListener);
        Button buttonDelete = (Button)this.findViewById(R.id.buttonDelete);
        buttonDelete.setOnClickListener(buttonDelete_ClickListener);
    } 
 
    /*
     * InsertボタンClick処理
     */
    private void buttonInsert_Click(View v){
        ContentValues values = new ContentValues();
        values.put("Name", "yan");
        values.put("Tel", "0000-1234-5678");
        values.put("Age", 18);
 
        DatabaseHelper dbHelper = new DatabaseHelper(this);
        SQLiteDatabase db = dbHelper.getWritableDatabase();
     long ret;
        try {
            ret = db.insert("MyTable", null, values);
        } finally {
            db.close();
        }
        if (ret == -1) {
            Toast.makeText(this, "Insert失敗", Toast.LENGTH_SHORT).show();
        } else { 
            Toast.makeText(this, "Insert成功", Toast.LENGTH_SHORT).show();
        }
    }
 
    /*
     * UpdateボタンClick処理
     */
    private void buttonUpdate_Click(View v){
        ContentValues values = new ContentValues();
        values.put("Age",24);
        String whereClause = "No = ?";
        String whereArgs[] = new String[1];
        whereArgs[0] = "1";
  
        DatabaseHelper dbHelper = new DatabaseHelper(this);
        SQLiteDatabase db = dbHelper.getWritableDatabase(); 
        int ret;
        try {
            ret = db.update("MyTable", values, whereClause, whereArgs);
        } finally {
            db.close();
        }
        if (ret == -1){
            Toast.makeText(this, "Update失敗", Toast.LENGTH_SHORT).show();
        } else { 
            Toast.makeText(this, "Update成功", Toast.LENGTH_SHORT).show();
        }
    }
 
    /* DeleteボタンClick処理 */
    private void buttonDelete_Click(View v){
        String whereClause = "No = ?";
        String whereArgs[] = new String[1];
        whereArgs[0] = "1";
  
        DatabaseHelper dbHelper = new DatabaseHelper(this);
        SQLiteDatabase db = dbHelper.getWritableDatabase(); 
        int ret;
        try {
            ret = db.delete("MyTable", whereClause, whereArgs);
        } finally {
            db.close();
        }
        if (ret == -1){
            Toast.makeText(this, "Delete失敗", Toast.LENGTH_SHORT).show();
        } else { 
            Toast.makeText(this, "Delete成功", Toast.LENGTH_SHORT).show();
        }
    }
}

DatabaseHelper.java
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class DatabaseHelper extends SQLiteOpenHelper {
 
    /* データベース名 */
    private final static String DB_NAME = "androidstudydb";
    /* データベースのバージョン */
    private final static int DB_VER = 1;
 
    /*
     * コンストラクタ
      */
    public DatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VER);
    }

    /*
     * onCreateメソッド
     * データベースが作成された時に呼ばれます。
     * テーブルの作成などを行います。
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "";
        sql += "create table MyTable (";
        sql += " No integer primary key autoincrement";
        sql += ",Name text not null";
        sql += ",Tel text";
        sql += ",Age integer";
        sql += ")";
        db.execSQL(sql);
    }

    /*
     * onUpgradeメソッド
     * onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれます。
     * 現在のレコードを退避し、テーブルを再作成した後、退避したレコードを戻すなどの処理を行います。
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  
    }

}


MainActivityのレイアウト(main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button 
 android:layout_width="wrap_content" android:layout_height="wrap_content" 
 android:id="@+id/buttonInsert" android:text="Insert">
</Button>

<Button 
 android:layout_width="wrap_content" android:layout_height="wrap_content" 
 android:id="@+id/buttonUpdate" android:text="Update">
</Button>

<Button 
 android:layout_width="wrap_content" android:layout_height="wrap_content" 
 android:id="@+id/buttonDelete" android:text="Delete">
</Button>
</LinearLayout>


【関連項目】
Android SQLiteデータベースを作成する
Android SQLiteのGUIツール
Android データベースにデータを書き込む(Insert、Update、Delete)
Android データベースのデータを読み込む(Select)
Android SQLiteデータベースを作成する(SQL文をリソースファイルに定義する)

0 件のコメント: