Android数据库sqlite封装心得
来源:互联网 发布:电钢琴教学软件 编辑:程序博客网 时间:2024/05/01 02:54
Android 里面对于数据库的访问如果我们在平时开发的时候最好能进行一下封装,这样扩展性会更好。这篇文章主要来谈一下数据库层封装的心得。
SQLITE是Android里面轻量实现的数据库,我们知道android提供了SQLiteDatabase类 用来创建和访问数据库对象。当要打开和创建数据库对象时,会执行
android里面也提供了SQLiteOpenHelper类,这个类该类是SQLiteDatabase一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase()或者 getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生成一个数据库。
package com.example.faithhopelove;import android.content.ContentValues;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;import com.example.faithhopelove.db.Group;/** * 数据库访问辅助类 */public class DBHelper {private static DBHelper dbhelper = null;private DatabaseHelper databasehelper = null;private DBHelper(Context context){this.databasehelper = new DatabaseHelper(context );} public synchronized static DBHelper getInstance(Context context){ //单例模型 if(dbhelper == null){ dbhelper = new DBHelper(context); } return dbhelper;}public SQLiteDatabase getWritableDB(){return databasehelper.getWritableDatabase();}public SQLiteDatabase getReadableDB(){return databasehelper.getReadableDatabase();}public void closeDB(){databasehelper.close();}private class DatabaseHelper extends SQLiteOpenHelper{private static final String DATABASE_NAME = "hzbg.db"; //数据库名称private static final int DB_VERSION = 10;public DatabaseHelper(Context context, String name,CursorFactory factory, int version) {super(context, name, factory, version);}public DatabaseHelper(Context context){this(context, DATABASE_NAME, null, DB_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {//Log.d("TAG","onCreate");db.execSQL(PersonColumns.CREAT_TABLE(PersonColumns.TABLE_NAME())); db.execSQL(GroupColumns.CREAT_TABLE(GroupColumns.TABLE_NAME())); initGroup(db, GroupColumns.TABLE_NAME()); initPerosn(db,PersonColumns.TABLE_NAME());}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//Log.d("TAG","onUpgrade");db.execSQL(PersonColumns.CREAT_TABLE(PersonColumns.TABLE_NAME())); db.execSQL(GroupColumns.CREAT_TABLE(GroupColumns.TABLE_NAME()));}} public void initGroup(SQLiteDatabase db,String tableName) {String[] names = { Group.GROUP1, Group.GROUP2, Group.GROUP3 };int len = names.length;db.beginTransaction();try {for (int i = 0; i < len; i++) {ContentValues values = new ContentValues();values.put( GroupColumns.ID, i);values.put(GroupColumns.GROUPNAME, names[i]); db.insert(tableName, null, values);}db.setTransactionSuccessful();} catch (Exception e) {} finally {db.endTransaction();}}public void initPerosn(SQLiteDatabase db, String table_NAME) {db.beginTransaction();try {ContentValues values = new ContentValues();values.put(PersonColumns.ID, "3");values.put(PersonColumns.USERNAME, "zhangkang");values.put(PersonColumns.BIRTH, "25");values.put(PersonColumns.ISMARRY, true);values.put(PersonColumns.SEX, "man");values.put(PersonColumns.BAPTISM, true);values.put(PersonColumns.ADDRESS, "china");values.put(PersonColumns.JOB, "programer");values.put(PersonColumns.PHONE, "110");values.put(PersonColumns.GROUPID, 1);values.put(PersonColumns.GROUPNAME, "信实组"); db.insert(table_NAME, null, values); db.setTransactionSuccessful();} catch (Exception e) {} finally {db.endTransaction();}} }
SQLiteOpenHelper在执行OnCreate的时候需要传入一个SQLiteDatabase 对象,这样的话对SQLiteOpenHelper操作时就有了SQLiteDatabase 对象。
我想我们应该把跟业务层面的逻辑单独封装出来,比如常见的数据库模型都对应一个bean对象,对这个bean进行操作的逻辑封装到
一个BeanColumns类当中,这个类的作用是由它去跟SQLiteOpenHelper完成跟bean对象相关的业务表的创建和查询等等,这样下次如果有新的业务表的话,就只用再新建一个bean对象,新建一个BeanColumns对象,这样逻辑比较清晰。
package com.example.faithhopelove;public class PersonColumns {public static String TABLE_NAME(){return "persons";} public static final String ID = "id"; //IDpublic static final String USERNAME = "name"; //姓名public static final String PHONE = "phone"; //电话号码public static final String SEX = "sex"; //性别public static final String BIRTH = "birth"; //生日public static final String JOB = "job"; //工作public static final String ISMARRY = "ismarried"; //是否结婚public static final String ADDRESS = "address"; //地址public static final String BAPTISM = "baptism";public static final String GROUPID = "groupid"; //组idpublic static final String GROUPNAME = "groupname"; //组名public static final String[] COLUMN_ARRAY = {ID,USERNAME,PHONE,SEX,BIRTH,JOB,ISMARRY,ADDRESS,BAPTISM,GROUPID,GROUPNAME};public static String CREAT_TABLE(String tableName){return new StringBuffer().append("CREATE TABLE IF NOT EXISTS ").append(tableName).append("(").append(ID).append(" TEXT PRIMARY KEY NOT NULL,").append(USERNAME).append(" TEXT,").append(PHONE).append(" TEXT,").append(SEX).append(" TEXT,").append(BIRTH).append(" TEXT,").append(JOB).append(" TEXT,").append(ISMARRY).append(" INTEGER DEFAULT 1,").append(ADDRESS).append(" INTEGER DEFAULT 0,").append(BAPTISM).append(" TEXT ,").append(GROUPID).append(" INTEGER DEFAULT 0, ").append(GROUPNAME).append(" TEXT ").append(");").toString();}private static String DROP_TABLE(){return "DROP TABLE IF EXISTS " + TABLE_NAME();}}
对于数据库层的封装,我把源码上传到了github上面,同学们可以去下载下来学习一下。
这个是github的地址:
https://github.com/preqel/FaithHopeLove
- Android数据库sqlite封装心得
- android操作sqlite数据库及心得
- android操作sqlite数据库及心得
- Android心得4.5--SQLite数据库--事务处理
- Android sqlite数据库的封装使用
- android sqlite数据库封装 实现crud
- sqlite数据库封装类
- SQLite 数据库封装
- SQlite数据库的封装
- sqlite数据库代码封装
- SQLite数据库的封装
- Android心得4.3--SQLite数据库--execSQL()和rawQuery()方法
- Android心得4.4--SQLite数据库--insert()、delete等方法
- Android心得4.5--SQLite数据库--事务处理、ListView列表显示
- Android心得4.3--SQLite数据库--execSQL()和rawQuery()方法
- Android心得4.3--SQLite数据库--execSQL()和rawQuery()方法
- Android心得4.3--SQLite数据库--execSQL()和rawQuery()方法
- Android心得4.3--SQLite数据库--execSQL()和rawQuery()方法
- 简历应遵守的原则
- 【速学java】 java后台框架 springmvc整合mybatis框架源码
- codeforces 338D GCD Table (扩展中国剩余定理)
- activiti工作流的web流程设计器整合视频教程 SSM和独立部署
- MFC List Control控件
- Android数据库sqlite封装心得
- BZOJ1026 SCOI2009WINDY数
- 图形验证
- 杨辉三角
- 员工考勤
- 2.19.1 字符逆序
- WEB入门.九 导航菜单
- Vue引入远程JS文件
- 经理评分