サンプルプログラム工場

AAKAKA Appで使われているプログラムのサンプルコードをそのまま公開!

サンプルプログラム工場 > android > AndroidでSQLiteで書き込む、読み込むサンプル@DbProviderEx3
Google Play AAKAKAxSOFTへ

AndroidでSQLiteで書き込む、読み込むサンプル@DbProviderEx3

実行ファイル(APK)やサンプル(zip)をダウンロードする
DbProviderEx3の実行イメージDbProviderEx3の実行イメージ

テキストボックスに何かを入力してから書き込みボタンを押すとデータベースに書き込む。
読み込みボタンを押すとテキストボックスに書き込まれた値が表示される。
アプリを起動した直後にも書き込まれている値を読み込んでテキストボックスに表示する。

●書き込まれたデータについて
アプリをアンインストールするタイミングでデータベースの値は全部消されるので、こちら側でデータベースの内容をすべて消す必要はない。

package com.aakaka.dbproviderex3;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;


public class DbProviderEx3Activity extends Activity implements OnClickListener {
	private TextView	editText;
	private Button writeButton;
	private Button readButton;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
        
        // コントローラーを取り出す
        this.editText = (TextView)this.findViewById(R.id.editText1);
        this.writeButton =(Button)this.findViewById(R.id.button1);
        this.writeButton.setOnClickListener(this);
        this.readButton =(Button)this.findViewById(R.id.button2);
        this.readButton.setOnClickListener(this);
    }

    /** ボタンがクリックされたときとかに呼ばれる */
	public void onClick(View v) {
		String tag =(String)v.getTag();
		
		// 書き込み
		if (tag.equals("write")) {
			try {
				this.writeDB(this.editText.getText().toString());
			} catch (Exception e) {
				showDialog(this, "エラー", "書き込みに失敗しました。");
			}
		// 読み込み
		} else if (tag.equals("read")) {
			try {
				this.editText.setText(this.readDB());
			} catch (Exception e) {
				showDialog(this, "エラー", "読み込みに失敗しました。");
			}
		}
	}
	
	private final static String CONNECT_URI = "content://com.aakaka.dbprovider/";
	
	/** DBへの書き込み */
	private void writeDB(String info) throws Exception {
		// コンテンツプロバイダが提供するデータベースを示すURI
		Uri uri = Uri.parse(CONNECT_URI);
		
		// コンテンツプロバイダが提供するデータベースへのアクセス
		ContentValues values = new ContentValues();
		values.put("id", "0");
		values.put("info", info);
		int number = this.getContentResolver().update(uri, values, null, null);
		
		// テーブルがないときは追加する
		if (number == 0)
			this.getContentResolver().insert(uri, values);
	}
	
	/** DB読み込み */
	private String readDB() throws Exception {
		// コンテンツプロバイダが提供するデータベースを示すURI
		Uri uri = Uri.parse(CONNECT_URI);
		
		// データベースへのアクセス
		Cursor cursor = this.getContentResolver().query(uri, new String[]{"id", "info"}, "id='0'", null, null);
		
		// 何も取れなかったら例外を送る
		if (cursor.getCount() ==0)
			throw new Exception();
		
		// データを取り出す
		cursor.moveToFirst();
		String tmp = cursor.getString(1);
		cursor.close();
		return tmp;
	}
	
	/** ダイアログの表示 */
	private static void showDialog(Context context, String title, String text) {
		AlertDialog.Builder ad = new AlertDialog.Builder(context);
		ad.setTitle(title);
		ad.setMessage(text);
		ad.setPositiveButton("OK", null);
		ad.show();
	}
}

package com.aakaka.dbproviderex3;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;

//DBを提供するコンテンツプロバイダ
public class DBProvider extends ContentProvider {
    private final static String DB_NAME ="test.db";//DB名
    private final static String DB_TABLE="test";   //テーブル名
    private final static int    DB_VERSION=1;      //バージョン
    
    private SQLiteDatabase db;//データベース
    
    //コンテンツプロバイダの初期化
    @Override
    public boolean onCreate() {
        //データベースの生成(3)
        DBHelper dbHelper=new DBHelper(getContext());
        db=dbHelper.getWritableDatabase();
        return (db!=null);
    }

    //データベースのクエリー命令(4)
    @Override
    public Cursor query(Uri uri,String[] columns,String selection, 
        String[] selectionArgs,String sortOrder) {
        return db.query(DB_TABLE,columns,selection,
            selectionArgs,null,null,null);
    }
    
    //データベースの更新命令(4)
    @Override
    public int update(Uri uri,ContentValues values, 
        String selection,String[] selectionArgs) {
        return db.update(DB_TABLE,values,null,null);
    }    
   
    //データベースの挿入命令(4)
    @Override
    public Uri insert(Uri uri,ContentValues values) {
        db.insert(DB_TABLE,"",values);
        return uri;
    }
    
    //データベースの削除命令(未使用)
    @Override
    public int delete(Uri uri,String selection, 
        String[] selectionArgs) {
        return 0;
    }
    
    //種別の取得(未使用)
    @Override
    public String getType(Uri uri) {
        return null;
    }

    //データベースヘルパーの定義
    private static class DBHelper extends SQLiteOpenHelper {
        //コンストラクタ
        public DBHelper(Context context) {
            super(context,DB_NAME,null,DB_VERSION);
        }
        
        //データベースの生成
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("create table if not exists "+
                DB_TABLE+"(id text primary key,info text)");
        }

        //データベースのアップグレード
        @Override
        public void onUpgrade(SQLiteDatabase db,
            int oldVersion,int newVersion) {
            db.execSQL("drop talbe if exists "+DB_TABLE);
            onCreate(db);
        }
    }  
}

サンプルプロジェクトをダウンロード APKファイルをダウンロード

, , ,

AndroidのListViewにボタンをつけるサンプル@tryListView03 Androidで複数のActivity(アクティビティ)を切り替えるサンプル@tryMultiA...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>