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);//插入数据库
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");