播放记录的SQLite数据库实现

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, 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");




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值