加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

播放记录的SQLite数据库实现

发布时间:2020-12-12 20:09:19 所属栏目:百科 来源:网络整理
导读: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.SQ
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对象的时候才会调用这个方法
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.execSQL("CREATE TABLE " + TABLE_NAME + " (" 
				+ VID + " TEXT PRIMARY KEY,"
				+ VIDEONAME + " TEXT," 
				+ VIDEOIMGURL + " TEXT,"
				+ VIDEOACTION + " TEXT,"
				+ CMD + " TEXT,"
				+ VIDEOSOURCE + " TEXT,"
				+ VIDEOCALLBACK + " TEXT);");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) {
		// TODO Auto-generated method stub
		db.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,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);
		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,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,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" },new String[] { "1" },null);
3、数据库删除操作:
            //调用SQLiteDatabase对象的delete方法进行删除操作  
            //第一个参数String:表名  
            //第二个参数String:条件语句  
            //第三个参数String[]:条件值  
            sqliteDatabase.delete("user",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",values); 

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读