基于Android系统的数据库类设计

基于Android系统的数据库类设计

       数据库SQLite是一个开源的、内嵌式的轻量级关系数据库。尽管SQLite是一个轻量级数据库,但它具备数据库的大部分功能,如触发器、索引、自动增长字段和LIMIT/OFFSET字句。由于该数据库占用资源少,目前广泛应用于嵌入式产品中。Android平台已经嵌入了SQLite数据库,对SQLite操作进行了封装,封装类库为SQLiteOpenHelper。现结合具体实例,分析自建的数据库操作类MyDb方法和步骤。

自定义类MyDb包括六个部分:构造方法MyDb( )、获取数据库实例化getInstance( )、创建表OnCreate( )、查询表Select( )、插入表insert( )和获取字段信息getID( )等方法。各部分逻辑关系图如下:


基于Android系统的数据库类设计_第1张图片
 

构造方法MyDb( )

public class MyDb extends SQLiteOpenHelper

{

private static int VERSION = 1;//数据库版本

    private static String DB_NAME = "MyDb.db";//数据库名称

    private static MyDb busDB ;

    public MyDb(Context context) {

       super(context, DB_NAME, null, VERSION);

    }

……

}

    在定义构造方法之前,先定义两个变量VERSION DB_NAME,为构造方法MyDb()做准备。Super()方法是调用父类构造方法,该方法有4个参数,第一个参数为context类型,即上下文对象类型;第二个参数String类型,即数据库名称;第三个参数CursorFactory类型,含义为游标工厂,这里赋值null;第四个参数VERSION,默认赋值为1。这里我们要理清MyDb的父类,从上面第一行代码我们可以得知SQLiteOpenHelper类,android开发类库中包含SQLiteOpenHelper类,该类封装了数据库SQLite,因此,我们继承SQLiteOpenHelper类,也就继承了该类的构造方法。

数据库实例化getInstance( )

     public static MyDb getInstance(Context context) {

       if(busDB==null){

           busDB = new MyDb(context);

           return busDB;

       }else{

           return busDB;

}

    要实例化数据库,也就是要实例化MyDb(),然后返回数据库实例,该方法为其他类引用数据库实例的字段做准备,如MyDb.getInstance(context).getID(c)

创建表OnCreate( )

    public void onCreate(SQLiteDatabase db) {

       db.execSQL("CREATE TABLE Info (_id INTEGER PRIMARY KEY AUTOINCREMENT,id TEXT, name TEXT,phone TEXT,address TEXT,money TEXT,state INTEGER)");

SQLiteOpenHelper类提供了一个执行SQL语句的方法exeSQL(),运用该方法可以方便创建数据库表Info

查询表Select( )

public Cursor select(String where, String orderBy) {// 返回表中的数据,where是调用时候传进来的搜索内容,orderby是设置中传进来的列表排序类型

       StringBuilder buf = new StringBuilder("SELECT * FROM "+"Info");

 

       if (where != null) {

           buf.append(" WHERE ");

           buf.append(where);

       }

 

       if (orderBy != null) {

           buf.append(" ORDER BY ");

           buf.append(orderBy);

       }

       Log.e("buf", buf.toString());

       return (getWritableDatabase().rawQuery(buf.toString(), null));

}

查询表记录是数据库操作最常用的功能之一,select()方法根据查询条件搜索表,包括所有字段的内容,该方法可传入两个参数,一个where参数,一个orderby,分别根据字段条件和排序搜索内容。SQLiteOpenHelper类有一个方法getWritableDatabase(),能够以写的方式打开数据库引用,链式方法rawQuery()执行数据检索,rawQuery()第一个参数为带占位符的SQL语句,第二个赋值null即可,需要注意的是select( )方法返回值类型为Cursor,即数据库游标。

插入表insert( )

    public void insert(String id,String name,String phone,String address,String money,int state){

       ContentValues cv = new ContentValues();

       cv.put("id", id);

       cv.put("name", name);

       cv.put("phone", phone);

       cv.put("address", address);

       cv.put("money", money);

       cv.put("state", state);

       getReadableDatabase().insert("Info", "name", cv);

     insert()方法参数根据插入表字段数量确定,Info表中6个字段,都需要人工插入值。

ContentValues类对象以键值对的形式存储数据,SQLite利用ContentValues对象插入一条新的记录,较用SQL语句不易出错,但需要提醒的是ContentValues只能存储简单数据类型,如StringInt等类型。getReadableDatabase()可以以读的方式打开数据库引用,其链式方法insert()第一个参数就是数据表名Info,第二个参数表中一个字段名,也可输入null,第三个参数输入ContentValues对象cv

获取字段信息

     * @param c 查询后的游标

     * @return 订单号

     */

    public String getID(Cursor c){

       return c.getString(1);

    }

 

    /**

     * 获取姓名

     * @param c 查询后的游标

     * @return 姓名

     */

    public String getName(Cursor c){

       return c.getString(2);

}

…….

    MyDb类除了实现创建表、查询记录、插入记录之外,还要完成各个字段值返回的任务,因此设计了getID()getName()6个方法,为视图View类调用各字段值做好准备。getID()方法参数为Cursor类型,也称做游标,对象c就是查询后的游标,游标c根据索引ID获取String类型的字段,例如c.getString(1)获得表中的订单号。

 

你可能感兴趣的:(编程)