SQLiteOpenHelper+ContentProvider的使用

效果图:

 

 

PetDbHelper

package com.example.admin.pets;


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.example.admin.pets.PetContract.PetEntry;

public class PetDbHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME="shelter.db";
private static final int DATABASE_VERSION=1;


public PetDbHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
String SQL_CREATE_PETS_TABLE="CREATE TABLE "+PetEntry.TABLE_NAME+"("+ PetEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ PetEntry.COLUMN__PET_NAME + " TEXT NOT NULL, "
+ PetEntry.COLUMN__PET_BREED + " TEXT, "
+ PetEntry.COLUMN__PET_GENDER + " INTEGER NOT NULL, "
+ PetEntry.COLUMN__PET_WEIGHT + " INTEGER NOT NULL DEFAULT 0);";
db.execSQL(SQL_CREATE_PETS_TABLE);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

PetProvider
package com.example.admin.pets;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.util.Log;
import com.example.admin.pets.PetContract.PetEntry;

public class PetProvider extends ContentProvider {

public static final String LOG_TAG = PetProvider.class.getSimpleName();
private PetDbHelper petDbHelper;
private static final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
private static final int PETS = 100;
private static final int PETS_ID = 101;

static {
matcher.addURI(PetContract.CONTENT_AUTHORITY, PetContract.PATH_PETS, PETS);
matcher.addURI(PetContract.CONTENT_AUTHORITY, PetContract.PATH_PETS + "/#", PETS_ID); }




@Override
public boolean onCreate() {
petDbHelper=new PetDbHelper(getContext());
return true;
}


@Override
public Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder) {
SQLiteDatabase sqLiteDatabase=petDbHelper.getReadableDatabase();
Cursor cursor;
final int match=matcher.match(uri);
switch (match){
case PETS:
cursor = sqLiteDatabase.query(PetContract.PetEntry.TABLE_NAME, projection, selection, selectionArgs, null, null,
sortOrder);
break;
case PETS_ID:
selection = PetContract.PetEntry._ID + "=?";
selectionArgs = new String[]{String.valueOf(ContentUris.parseId(uri))};
cursor = sqLiteDatabase.query(PetContract.PetEntry.TABLE_NAME, projection, selection, selectionArgs, null, null,
sortOrder);
break;
default:
throw new IllegalArgumentException("Cannot query unknown URL" + uri);

}
cursor.setNotificationUri(getContext().getContentResolver(),uri);
return cursor;
}



@Override
public Uri insert( Uri uri, ContentValues values) {
final int match = matcher.match(uri);
switch (match) {
case PETS:
return insertPet(uri, values);
default:
throw new IllegalArgumentException("Insertion is not supported for " + uri);
}
}

private Uri insertPet(Uri uri, ContentValues values) {
String name = values.getAsString(PetEntry.COLUMN__PET_NAME);

if (name == null) {
throw new IllegalArgumentException("Pet requires a name"); }

Integer gender = values.getAsInteger(PetEntry.COLUMN__PET_GENDER);
if (gender == null || !PetEntry.isValidGender(gender)) {
throw new IllegalArgumentException("Pet requires valid gender"); }

Integer weight = values.getAsInteger(PetEntry.COLUMN__PET_WEIGHT);
if (weight != null && weight < 0) {
throw new IllegalArgumentException("Pet requires valid weight"); }

SQLiteDatabase database = petDbHelper.getWritableDatabase();

long id = database.insert(PetEntry.TABLE_NAME, null, values);
if (id == -1) {
Log.e(LOG_TAG, "Failed to insert row for " + uri);
return null;
}

getContext().getContentResolver().notifyChange(uri,null);
return ContentUris.withAppendedId(uri, id);
}



@Override
public int delete( Uri uri, String selection,String[] selectionArgs) {
int rowsDeleted;

SQLiteDatabase database = petDbHelper.getWritableDatabase();

final int match = matcher.match(uri);
switch (match) {
case PETS:
rowsDeleted = database.delete(PetEntry.TABLE_NAME, selection, selectionArgs);
break;
case PETS_ID:
selection = PetEntry._ID + "=?";
selectionArgs = new String[]{String.valueOf(ContentUris.parseId(uri))};
rowsDeleted = database.delete(PetEntry.TABLE_NAME, selection, selectionArgs);
break;
default:
throw new IllegalArgumentException("Deletion is not supported for " + uri);
}

if (rowsDeleted != 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
return rowsDeleted;

}

@Override
public int update( Uri uri, ContentValues values, String selection, String[] selectionArgs) {
final int match = matcher.match(uri);
switch (match) {
case PETS:
return updatePet(uri, values, selection, selectionArgs);
case PETS_ID:
selection = PetEntry._ID + "=?";
selectionArgs = new String[]{String.valueOf(ContentUris.parseId(uri))};
return updatePet(uri, values, selection, selectionArgs);
default:
throw new IllegalArgumentException("Update is not supported for " + uri);
}
}

private int updatePet(Uri uri, ContentValues values, String selection, String[] selectionArgs) {

if (values.containsKey(PetEntry.COLUMN__PET_NAME)) {
String name = values.getAsString(PetEntry.COLUMN__PET_NAME);
if (name == null) {
throw new IllegalArgumentException("Pet requires a name"); } }

if (values.containsKey(PetEntry.COLUMN__PET_GENDER)) {
Integer gender = values.getAsInteger(PetEntry.COLUMN__PET_GENDER);
if (gender == null || !PetEntry.isValidGender(gender)) {
throw new IllegalArgumentException("Pet requires valid gender"); } }


if (values.containsKey(PetEntry.COLUMN__PET_WEIGHT)) {
Integer weight = values.getAsInteger(PetEntry.COLUMN__PET_WEIGHT);
if (weight != null && weight < 0) {
throw new IllegalArgumentException("Pet requires valid weight"); } }

if (values.size() == 0) {
return 0; }

SQLiteDatabase database = petDbHelper.getWritableDatabase();
int rowsUpdated = database.update(PetEntry.TABLE_NAME, values, selection, selectionArgs);

if (rowsUpdated != 0) {
getContext().getContentResolver().notifyChange(uri, null); }

return rowsUpdated;
}



@Override
public String getType( Uri uri) {
final int match = matcher.match(uri);
switch (match) {
case PETS:
return PetEntry.CONTENT_LIST_TYPE;
case PETS_ID:
return PetEntry.CONTENT_ITEM_TYPE;
default:
throw new IllegalStateException("Unknown URI " + uri + " with match " + match);
}

}

}
github项目源码: https://github.com/NeoWu55/Android-Pets

转载于:https://www.cnblogs.com/neowu/p/10671304.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值