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