android SQLiteOpenHelper和ContentProvider的结合使用

来源:互联网 发布:淘宝上买面膜可靠吗 编辑:程序博客网 时间:2024/04/29 12:01

首先我们要创建一个继承ContentProvider 的类WifiSsidProvider 用于实现对数据库的增删改查,其次是创建数据库WifiSsidDatabaseHelper 实现表的创建


package com.android.settings.wifi;

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.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.util.Log;

public class WifiSsidProvider extends ContentProvider {

private WifiSsidDatabaseHelper dbOpenHelper;

//数据库

private static final String DATABASE_NAME = "settings.db";

//ssid表

public static final String TABLE_SSID = "table_ssid";

//mac表

public static final String TABLE_MAC = "table_mac";

//创建数据库,只执行一次,如果创建了就不会再执行

@Override
public boolean onCreate() {
dbOpenHelper=new WifiSsidDatabaseHelper(getContext(),DATABASE_NAME,null,1);
return false;
}
//查询数据库
@Override
public Cursor query(Uri uri, String[] projection, String where, String[] selectionArgs, String sortOrder) {
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
return db.query(TABLE_SSID, projection, where, selectionArgs, null, null, sortOrder, null);
}

@Override
public String getType(Uri uri) {
return null;
}
//插入数据
@Override
public Uri insert(Uri uri, ContentValues values) {
Log.i("chensenquan", "insert ssid values:"+values.toString());
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
db.insert(TABLE_SSID, "_id", values);
return null;
}
//删除数据
@Override
public int delete(Uri uri, String where, String[] selectionArgs) {
Log.i("chensenquan", "delete ssid where:"+where);
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
return db.delete(TABLE_SSID, where, selectionArgs);
}
//修改数据
@Override
public int update(Uri uri, ContentValues values, String where, String[] selectionArgs) {
Log.i("chensenquan", "update ssid where:"+where);
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
return db.update(TABLE_SSID, values, where, selectionArgs);
}

public class WifiSsidDatabaseHelper extends SQLiteOpenHelper{
private static final String CRATE_TABLE_SSID_SQL="create table "+TABLE_SSID+"(_id interger primary key,name text,status interger)";
private static final String CRATE_TABLE_MAC_SQL="create table "+TABLE_MAC+"(_id interger primary key,name text,status interger)";
public WifiSsidDatabaseHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}

//新建表,只执行一次(当发现有这个数据库的时候)所以全部的表都在这创建

//只有执行dbOpenHelper.getReadableDatabase();的时候才会执行onCreate()方法建表,有表就不会执行

@Override
public void onCreate(SQLiteDatabase db) {
Log.i("chensenquan", "onCreate ssid table"+TABLE_SSID);
Log.i("chensenquan", "onCreate mac table"+TABLE_MAC);
db.execSQL(CRATE_TABLE_SSID_SQL);
db.execSQL(CRATE_TABLE_MAC_SQL);
//String deleteTable="drop table "+TABLE_SSID;
//db.execSQL(deleteTable);
}
//版本更新
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

}

以上就是ContentProvider的增删改查,如在其他类中调用它里面的几个方法,操作数据库需注册:

<provider android:name=".wifi.WifiSsidProvider"

android:authorities="com.android.setting.wifi.provider.wifissidprovider"

android:exported="true"/>

利用配置的authorities属性实现调用,如果没有配置该属性,就无法调用该WifiSsidProvider里面的方法,找不到其入口

完了之后就可以操作数据库了

public static final String AUTHORITY="com.android.setting.wifi.provider.wifissidprovider";
public static final Uri SSID_CONTENT_URI=Uri.parse("content://"+AUTHORITY);

增:

ContentValues values=new ContentValues();
values.put("name", edit.getText().toString());
values.put("status", 1);
getContentResolver().insert(SSID_CONTENT_URI, values);

删:

int deleteid=getContentResolver().delete(SSID_CONTENT_URI, "rowid="+ssidid, null);
Log.i("chensenquan", "ssid deleteid:"+deleteid);

改:

ContentValues values=new ContentValues();
values.put("name", edit.getText().toString());
int numid=getContentResolver().update(SSID_CONTENT_URI, values, "rowid="+ssidid, null);
Log.i("chensenquan", "ssid update numid:"+numid);

查:

Cursor cursor = getContentResolver().query(SSID_CONTENT_URI, new String[]{"rowid as _id","name","status"}, null, null, null);
ssidList.removeAll();
if(cursor.moveToFirst()){
do{
final int ssidid=cursor.getInt(0);
final String name=cursor.getString(1);
int status=cursor.getInt(2);
Log.i("chensenquan", "ssid _id:"+ssidid);
} while(cursor.moveToNext());
}
cursor.close();


0 0
原创粉丝点击