▼Androidメモ▼
DBを提供するコンテンツプロバイダの利用


DBを提供するコンテンツプロバイダを作成する。


ソースコード
DBProviderEx.java
package net.npaka.dbproviderex;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

//DBを提供するコンテンツプロバイダ
public class DBProviderEx extends Activity
implements View.OnClickListener {
private final static int WC=LinearLayout.LayoutParams.WRAP_CONTENT;
private final static int MP=LinearLayout.LayoutParams.MATCH_PARENT;
private final static String TAG_WRITE="write";
private final static String TAG_READ="read";
private EditText editText;

//アクティビティ起動時に呼ばれる
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
requestWindowFeature(Window.FEATURE_NO_TITLE);

//レイアウトの生成
LinearLayout layout=new LinearLayout(this);
layout.setBackgroundColor(Color.WHITE);
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout);

//エディットテキストの生成
editText=new EditText(this);
editText.setLayoutParams(new LinearLayout.LayoutParams(MP,WC));
layout.addView(editText);

//ボタンの生成
layout.addView(makeButton("書き込み",TAG_WRITE));
layout.addView(makeButton("読み込み",TAG_READ));
}

//ボタンの生成
private Button makeButton(String text,String tag) {
Button button=new Button(this);
button.setText(text);
button.setTag(tag);
button.setOnClickListener(this);
button.setLayoutParams(new LinearLayout.LayoutParams(WC,WC));
return button;
}

//ボタンクリックイベントの処理
public void onClick(View v) {
String tag=(String)v.getTag();
if (TAG_WRITE.equals(tag)) {
try {
writeDB(editText.getText().toString());
} catch (Exception e) {
toast("書き込み失敗しました。");
}
} else if (TAG_READ.equals(tag)) {
try {
editText.setText(readDB());
} catch (Exception e) {
toast("読み込み失敗しました。");
}
}
}

//DBへの書き込み
private void writeDB(String info) throws Exception {
//コンテンツプロバイダが提供するデータベースを示すURI
Uri uri=Uri.parse("content://net.npaka.dbprovider/");

//コンテンツプロバイダが提供するデータベースへのアクセス
ContentValues values=new ContentValues();
values.put("id","0");
values.put("info",info);
int num=getContentResolver().update(uri,values,null,null);
if (num==0) getContentResolver().insert(uri,values);
}

//DBからの読み込み
private String readDB() throws Exception {
//コンテンツプロバイダが提供するデータベースを示すURI
Uri uri=Uri.parse("content://net.npaka.dbprovider/");

//コンテンツプロバイダが提供するデータベースへのアクセス
Cursor c=this.getContentResolver().query(uri,
new String[]{"id","info"},"id='0'",null,null);
if (c.getCount()==0) throw new Exception();
c.moveToFirst();
String str=c.getString(1);
c.close();
return str;
}

//トーストの表示
private void toast(String text) {
if (text==null) text="";
Toast.makeText(this,text,Toast.LENGTH_LONG).show();
}
}


DBProvider.java
package net.npaka.dbproviderex;
import android.content.ContentProvider;
import android.content.Context;
import android.content.ContentValues;
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);
}

//データベースのクエリー命令
@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);
}

//データベースの更新命令
@Override
public int update(Uri uri,ContentValues values,
String selection,String[] selectionArgs) {
return db.update(DB_TABLE,values,null,null);
}

//データベースの挿入命令
@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);
}
}
}


AndroidManifest.xml
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.npaka.dbproviderex"
android:versionCode="1"
android:versionName="1.0">

<uses-sdk android:minSdkVersion="13" android:targetSdkVersion="16" />

<application android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">
<activity
android:label="@string/app_name"
android:name=".DBProviderEx" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<provider
android:name="DBProvider"
android:authorities="net.npaka.dbprovider"
android:exported="false">
</provider>
</application>

</manifest>


−戻る−