一、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.classpublic 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; } }