ContentProvider操作数据库

一、SQLite数据库直接操作类     

DataBaseHelper.class

import android.content.ContentValues;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import com.example.beyond.sunshinemusicplayer.dialog.ContentValuesBuilder;
import com.example.beyond.sunshinemusicplayer.model.Playlist;

import java.util.Date;

/**
 * Created by xuemei on 2016/4/12.
 *
 */
public class DataBaseHelper extends SQLiteOpenHelper {
    public static final String PLAYLIST_TABLE_NAME = "playlist";
    public static final String AUDIO_LIST_TABLE_NAME = "playlist_audio";
    public static final String DATABASE_NAME = "player.db";

    public DataBaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 12);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS playlist (id INIEGER PRIMARY KEY,"
                + "name TEXT CHECK( name != ''),add_date INTEGER,modified_date INTEGER);");

        db.execSQL("CREATE TABLE IF NOT EXISTS playlist_audio (id INTEGER PRIMARY KEY,playlist_id INTEGER NOT NULL,audio_name TEXT,audio_path,add_date INTEGER,modified_date INTEGER);");


        Playlist playlist = new Playlist();
        Date date = new Date();
        playlist.setAddDate(date);
        playlist.setUpdateDate(date);
        playlist.setName("我的最爱");

        try {
            ContentValues contentValues = ContentValuesBuilder.getInstance().bulid(playlist);
            db.insert(PLAYLIST_TABLE_NAME, null, contentValues);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS playlist");
        db.execSQL("DROP TABLE IF EXISTS playlist_audio");
        onCreate(db);
    }
}


二、保存跟数据库及表有关的常量
Constants.class

public static final String AUTHORITY = "com.xuemei.android.player.db.databaseprovider";
public static final String AUDIO_LIST_PATH = "audiolist";
public static final String PLAYLIST_PATH = "playlist";
public static final String AUDIO_LIST_URI = "content://" + AUTHORITY + "/" + AUDIO_LIST_PATH;
public static final String PLAYLIST_URI = "content://" + AUTHORITY + "/" + PLAYLIST_PATH;


三、对数据增删改查操作的类
DataBaseProvider.class


import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.util.Log;

import com.example.beyond.sunshinemusicplayer.common.Constants;
import com.example.beyond.sunshinemusicplayer.db.DataBaseHelper;

/**
 * Created by xuemei on 2016/4/12.
 */
public class DataBaseProvider extends ContentProvider {
    private DataBaseHelper dataBaseHelper;
    //通过UriMatcher匹配外部请求
    private static UriMatcher URI_MATCHER=new UriMatcher(UriMatcher.NO_MATCH);
    //匹配状态常量
    private static final int PLAYLIST=1;
    private static final int AUDIO_LIST=2;
    //添加Uri
   static {
        URI_MATCHER.addURI(Constants.AUTHORITY,Constants.PLAYLIST_PATH,PLAYLIST);
        URI_MATCHER.addURI(Constants.AUTHORITY,Constants.AUDIO_LIST_PATH,AUDIO_LIST);
    }


    @Override
    public boolean onCreate() {
        //创建数据库
        dataBaseHelper=new DataBaseHelper(getContext());
        return true;
    }

    @Nullable
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        SQLiteDatabase db=dataBaseHelper.getWritableDatabase();
        Cursor cursor=null;
        // 依次参数为:表明,查询字段,where语句,占位符替换,group by(分组)having(分组条件),order by(排序)
       switch (URI_MATCHER.match(uri)){
           case PLAYLIST:
               cursor=db.query(DataBaseHelper.PLAYLIST_TABLE_NAME,projection,
                       selection,selectionArgs,null,null,sortOrder);
               break;
           case  AUDIO_LIST:
               cursor=db.query(DataBaseHelper.AUDIO_LIST_TABLE_NAME,projection,
                       selection,selectionArgs,null,null,sortOrder);
               break;
           default:
               break;
       }
        return cursor;
    }

    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        SQLiteDatabase db = dataBaseHelper.getWritableDatabase();
        long count = 0;
        switch (URI_MATCHER.match(uri)) {
            case PLAYLIST: {
                try {
                    count = db.insert(DataBaseHelper.PLAYLIST_TABLE_NAME, null, values);
                    break;
                } catch (Exception ex) {
                    Log.e("error", "insert table palylist:" + ex.getMessage());
                }
            }
            case AUDIO_LIST: {
                try {
                    count = db.insert(DataBaseHelper.AUDIO_LIST_TABLE_NAME, null, values);
                    break;
                } catch (Exception ex) {
                    Log.e("error", "insert table audio list:" + ex.getMessage());
                }
            }
        }
        //db.close();
        if (count > 0)
            return uri;
        else
            return null;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        int count = -1;
        SQLiteDatabase db = dataBaseHelper.getWritableDatabase();
        switch (URI_MATCHER.match(uri)) {
            case PLAYLIST:

                count = db.delete(DataBaseHelper.PLAYLIST_TABLE_NAME, selection, selectionArgs);
               
                //db.delete(DataBaseHelper.AUDIO_LIST_TABLE_NAME, "playlist_id = ?", selectionArgs);
                break;
            case AUDIO_LIST:
                count = db.delete(DataBaseHelper.AUDIO_LIST_TABLE_NAME, selection,
                        selectionArgs);
                break;
            default:
                break;
        }
        //db.close();
        return count;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        return 0;
    }
}

四、在清单文件中注册
<provider android:name=".provider.DataBaseProvider"
    android:authorities="com.xuemei.android.player.db.databaseprovider" />


五、使用例子

import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.ContextWrapper;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;

import com.example.beyond.sunshinemusicplayer.common.Constants;
import com.example.beyond.sunshinemusicplayer.db.SongDB;
import com.example.beyond.sunshinemusicplayer.inteface.PlaylistDao;
import com.example.beyond.sunshinemusicplayer.manage.MediaManage;
import com.example.beyond.sunshinemusicplayer.model.Playlist;
import com.example.beyond.sunshinemusicplayer.model.SongInfo;
import com.example.beyond.sunshinemusicplayer.model.SongMessage;
import com.example.beyond.sunshinemusicplayer.observable.ObserverManage;

import java.net.URI;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by xuemei on 2016/4/10.
 * 播放列表
 */
public class PlaylistDaoImpl extends ContextWrapper implements PlaylistDao {
    private ContentResolver contentResolver;
    private Uri uri = Uri.parse(Constants.PLAYLIST_URI);
    private ContentValues values = new ContentValues();
    private Playlist playlist;


    public PlaylistDaoImpl(Context context) {
        super(context);

    }

    //实现PlaylistDao,实现的,创建,删除,获取的三个方法
    @Override
    public void createPlaylist(String name) {
        contentResolver = getContentResolver();
        playlist = new Playlist();
        playlist.setName(name);
        playlist.setAddDate(new Date());
        playlist.setUpdateDate(new Date());
        try {
            values = ContentValuesBuilder.getInstance().bulid(playlist);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        contentResolver.insert(uri, values);
    }

    @Override
    public void removePlaylist(String id) {
        contentResolver=getContentResolver();
        Log.i("xuemei","allPlaylist删除id==="+id);
        Log.i("xuemei","allPlaylist删除new String[]{id}==="+new String[]{id}.toString());
        contentResolver.delete(uri,"id=?",new String[]{id});


    }

    @Override
    public List<Playlist> getAllPlaylist() {
        contentResolver = getContentResolver();
        List<Playlist> playlists = new ArrayList<>();
        String[] projection = {"id", "name"};
        Cursor cursor = contentResolver.query(uri, projection, null, null, null);
        if(cursor!=null){
            if(cursor.moveToFirst()){
                for(int i=0;i<cursor.getCount();i++){
                    Playlist playlist=new Playlist();
                    cursor.moveToPosition(i);
                    playlist.setId(cursor.getLong(0));
                    playlist.setName(cursor.getString(1));
                    playlists.add(playlist);
                }
            }
            cursor.close();
            return playlists;
        }
        return playlists;
    }
}






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值