播放记录的SQLite数据库实现

来源:互联网 发布:柒牌 淘宝 编辑:程序博客网 时间:2024/05/11 01:58
package com.himedia.playrecordapp;import java.util.ArrayList;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/**  * SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能  * 第一,getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作  * 第二,提供了onCreate()、onUpgrade()两个回调函数,允许我们再创建和升级数据库时,进行自己的操作  */ public class PlayRecordDB extends SQLiteOpenHelper{private static final String DATABASE_NAME = "himedia_playrecord.db";private static final int DATABASE_VERSION = 1;private static final String TABLE_NAME = "playrecord";private static final String VID = "vid";private static final String VIDEONAME = "videoName";private static final String VIDEOIMGURL = "videoImgUrl";private static final String VIDEOACTION = "videoAction";private static final String CMD = "cmd";private static final String VIDEOSOURCE = "videoSource";private static final String VIDEOCALLBACK = "videoCallback";private static final String[] FROM = { VID, VIDEONAME, VIDEOIMGURL, VIDEOACTION, CMD, VIDEOSOURCE, VIDEOCALLBACK};public PlayRecordDB(Context context) {/**      * 在SQLiteOpenHelper的子类当中,必须有该构造函数      * @param context   上下文对象      * @param name      数据库名称      * @param factory      * @param version   当前数据库的版本,值必须是整数并且是递增的状态      */  super(context, DATABASE_NAME, null, DATABASE_VERSION);// TODO Auto-generated constructor stub}//该函数是在第一次创建的时候执行,实际上是第一次得到SQLiteDatabase对象的时候才会调用这个方法@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL("CREATE TABLE " + TABLE_NAME + " (" + VID + " TEXT PRIMARY KEY, "+ VIDEONAME + " TEXT, " + VIDEOIMGURL + " TEXT, "+ VIDEOACTION + " TEXT, "+ CMD + " TEXT, "+ VIDEOSOURCE + " TEXT, "+ VIDEOCALLBACK + " TEXT);");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubdb.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);onCreate(db);}//添加播放记录数据public boolean addPlayRecord(PlayRecordDate playrecord) {boolean result = false;SQLiteDatabase db = getWritableDatabase();ContentValues values = new ContentValues();values.put(VID, playrecord.getVid());values.put(VIDEONAME, playrecord.getVideoName());values.put(VIDEOIMGURL, playrecord.getVideoImgUrl());values.put(VIDEOACTION, playrecord.getVideoAction());values.put(CMD, playrecord.getCmd());values.put(VIDEOSOURCE, playrecord.getVideoSource());values.put(VIDEOCALLBACK, playrecord.getVideoCallback());if (hasAlert(db, playrecord.getVid())) {delAlert(db, playrecord.getVid());}try {// 调用insert方法,就可以将数据插入到数据库当中              // 第一个参数:表名称              // 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值              // 第三个参数:ContentValues对象 db.insertOrThrow(TABLE_NAME, null, values);hasTenRecords(db);} catch (Exception e) {// TODO: handle exception}result = true;db.close();//关闭所有打开的数据库对象return result;}private boolean hasAlert(SQLiteDatabase db, String vid) {String selection = VID + "='" + vid + "'";Cursor cursor = db.query(TABLE_NAME, FROM, selection, null, null, null,null);boolean hasCht = false;if (cursor != null && cursor.getCount() > 0) {hasCht = true;}cursor.close();return hasCht;}public void delAlert(SQLiteDatabase db, String vid) {String whereClause = VID + "='" + vid + "'";db.delete(TABLE_NAME, whereClause, null);}private void hasTenRecords(SQLiteDatabase db) {Cursor cursor = db.query(TABLE_NAME, FROM, null, null, null, null, null);if (cursor.getCount() > 5) {cursor.moveToFirst();if (cursor.isFirst()) {String vid = cursor.getString(cursor.getColumnIndex(VID));delAlert(db, vid);}}cursor.close();}public ArrayList<PlayRecordDate> getPlayRecord() {PlayRecordDate playrecord = null;ArrayList<PlayRecordDate> arrayList = new ArrayList<PlayRecordDate>();SQLiteDatabase db = getReadableDatabase();Cursor cursor = db.query(TABLE_NAME, FROM, null, null, null, null, null);cursor.moveToFirst();if (cursor.getCount() != 0) {do {playrecord = new PlayRecordDate();playrecord.setVid(cursor.getString(cursor.getColumnIndex(VID)));playrecord.setVideoName(cursor.getString(cursor.getColumnIndex(VIDEONAME)));playrecord.setVideoImgUrl(cursor.getString(cursor.getColumnIndex(VIDEOIMGURL)));playrecord.setVideoAction(cursor.getString(cursor.getColumnIndex(VIDEOACTION)));playrecord.setCmd(cursor.getString(cursor.getColumnIndex(CMD)));playrecord.setVideoSource(cursor.getString(cursor.getColumnIndex(VIDEOSOURCE)));playrecord.setVideoCallback(cursor.getString(cursor.getColumnIndex(VIDEOCALLBACK)));arrayList.add(playrecord);} while (cursor.moveToNext());}cursor.close();db.close();return arrayList;}}

数据库添加、查询、删除操作方式如下:

    PlayRecordDB playRecordHelp = new PlayRecordDB(context);    playRecordHelp.addPlayRecord(playrecord);//插入数据库

SQLite几个数据库操作方法也在此列举出来:

1、数据库更新操作:

            // 得到一个可写的SQLiteDatabase对象              SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();              // 创建一个ContentValues对象              ContentValues values = new ContentValues();              values.put("name", "zhangsan");              // 调用update方法              // 第一个参数String:表名              // 第二个参数ContentValues:ContentValues对象              // 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符              // 第四个参数String[]:占位符的值              sqliteDatabase.update("user", values, "id=?", new String[] { "1" });  
2、数据库查询操作:
            // 得到一个只读的SQLiteDatabase对象              SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();              // 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象              // 第一个参数String:表名              // 第二个参数String[]:要查询的列名              // 第三个参数String:查询条件              // 第四个参数String[]:查询条件的参数              // 第五个参数String:对查询的结果进行分组              // 第六个参数String:对分组的结果进行限制              // 第七个参数String:对查询的结果进行排序              Cursor cursor = sqliteDatabase.query("user", new String[] { "id","name" }, "id=?", new String[] { "1" }, null, null, null);
3、数据库删除操作:
            //调用SQLiteDatabase对象的delete方法进行删除操作              //第一个参数String:表名              //第二个参数String:条件语句              //第三个参数String[]:条件值              sqliteDatabase.delete("user", "id=?", new String[]{"1"});
4、数据库插入操作:
            // 创建ContentValues对象              ContentValues values = new ContentValues();              // 向该对象中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致              values.put("id", 1);              values.put("name", "yangyz");            // 得到一个可写的SQLiteDatabase对象              SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();              // 调用insert方法,就可以将数据插入到数据库当中              // 第一个参数:表名称              // 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值              // 第三个参数:ContentValues对象              sqliteDatabase.insert("user", null, values); 

数据库查询按某字段降序排列

Cursor cursor = db.query(TABLE_NAME, FROM, null, null, null, null, VID+" desc");




0 0