您的位置:首页 > 数据库 > SQL

android SQLiteOpenHelper和ContentProvider的结合使用

2016-11-12 14:23 387 查看
首先我们要创建一个继承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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: