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