Android实战开发---数据库操作类

 

在我们的框架中,有一个文件叫做DBTool.java,很明显,是我们用来处理数据库的类。在Android的开发中,我们操作的数据库是SQLite这个小型的数据库,一个小小的手机,当然是装不下MSSQL或者MySQL之类的大家伙,同时,较高的资源消耗也是移动开发中必需要注意的问题,所以一个小巧好用的数据库也就成为了我们的好伙伴!

 

 

 

先汇报一下目前项目的进展,已经做了几天的Model开发,也就是请求接口获取数据。现在大部分的已经写完了,主要是iphone外包公司的效果图还未提交过来,所以我们也只能先进行最底层的开发。等开Tools包中的东西都发上来以后,我们再来研究Model层以及XML的解析。

 

 

 

我们还是先看看完整的代码,然后一一描述。

 

 

 

 

 

 

package hb.hbwb.tools; 

 

import hb.hbwb.finals.DBFinals; 

import android.content.ContentValues; 

import android.content.Context; 

import android.database.Cursor; 

import android.database.SQLException; 

import android.database.sqlite.*; 

 

/**

 * @name 数据库相关操作类

 * @author zhang.yue

 * @create_date 20110512

 * @last_edit_author zhang.yue

 * @last_edit_date 20111115

 * @remark

 * @edit_remark 优化代码

 */ 

public class DBTool { 

    private Context mCtx = null; 

    private DatabaseHelper dbHelper = null; 

    private SQLiteDatabase db = null;    

    /**

     * 构造函数   1

     * @param ctx context对象

     */ 

    public DBTool(Context ctx){ 

        this.mCtx = ctx; 

    } 

     

    /**

     * 打开数据连接

     * @return

     * @throws SQLException

     */ 

    public DBTool open() throws SQLException{ 

        dbHelper = new DatabaseHelper(mCtx); 

        db = dbHelper.getWritableDatabase();    //如果数据库不存在就建立一个,反之存在则根据版本更新

        return this; 

    } 

     

    /**

     * 关闭数据连接

     */ 

    public void close(){ 

        dbHelper.close(); 

    } 

     

    /**

     * 列表查询用  1

     * @param tableName 表名

     * @param strCols 列名

     * @param strWhere 条件

     * @param strGroupby 分组

     * @param strOrderby 排序

     * @return 数据指针

     */ 

    public Cursor getAll(String tableName,String[] strCols,String strWhere,String strGroupby,String strOrderby){ 

        return db.query(tableName,  //表名

                strCols,       //列

                strWhere,          //where语句

                null,          //where语句的参数

                strGroupby,          //GROUP by语句

                null,          //HAVING语句

                strOrderby           //order by语句

                ); 

    } 

 

    /**

     * 列表查询用  2

     * @param sql 传入sql语句直接查询

     * @return 数据指针

     */ 

    public Cursor getAll(String sql){ 

        return db.rawQuery(sql, null); 

    } 

     

    /**

     * 单个数据查询  1

     * @param rowId 数据id

     * @param tableName 表名

     * @param key 关键字

     * @param strCols 列名

     * @param strWhere 条件

     * @param strGroupby 分组

     * @param strOrderby 排序

     * @return 单个数据指针

     */ 

    public Cursor get(long rowId,String tableName,String key,String[] strCols,String strWhere,String strGroupby,String strOrderby){ 

        Cursor mCursor = db.query(  

                tableName, 

                strCols, 

                key+"="+rowId, 

                null,strGroupby,null,strOrderby); 

         

        //如果指针存在,就把指针移到第一个条目上

        if(mCursor!=null) 

            mCursor.moveToFirst(); 

         

         

        return mCursor; 

    } 

     

    /**

     * 单个数据查询  2

     * @param sql 传入sql语句直接查询

     * @return 单个数据指针

     */ 

    public Cursor get(String sql){ 

        Cursor mCursor =db.rawQuery(sql, null); 

        //如果指针存在,就把指针移到第一个条目上

        if(mCursor!=null) 

            mCursor.moveToFirst(); 

         

        return mCursor; 

    } 

     

    /**

     * 更新数据

     * @param rowId 数据id

     * @param tableName 表名

     * @param key 更新列名

     * @param args 更新数据

     * @return 是否更新成功

     */ 

    public boolean update(long rowId,String tableName,String key,ContentValues args){ 

        return db.update(tableName, args, key+"="+rowId, null)>0; 

    } 

     

    /**

     * 插入新数据

     * @param tableName 表名

     * @param args 数据

     * @return 成功返回id,失败返回-1

     */ 

    public long create(String tableName,ContentValues args){ 

        //                 表名           ,不重要,内容值

        return db.insert(tableName, null, args); 

    } 

     

    /**

     * 删除数据

     * @param rowId 数据id

     * @param tableName 表名

     * @param key 关键字

     * @return 是否删除成功

     */ 

    public boolean delete(long rowId,String tableName,String key){ 

        return db.delete(tableName, key+"="+rowId, null)>0; 

    } 

     

     

    /**

     * @name DBTool内部类,用于创建和更新数据库

     * @author zhang.yue

     * @create_date 2011-11-15

     * @last_edit_author 

     * @last_edit_date 

     * @remark 

     * @edit_remark

     */ 

    public static class DatabaseHelper extends SQLiteOpenHelper{ 

        /**

         * 构造函数

         * @param context context数据

         */ 

        public DatabaseHelper(Context context) { 

            //   对象           ,数据库名               ,复杂查询    ,数据库版本

            super(context, DBFinals.DATABASE_NAME, null, DBFinals.DBTABASE_VERSION); 

        } 

     

        /**

         * 重写onCreate方法,建立数据库

         */ 

        @Override 

        public void onCreate(SQLiteDatabase db) { 

            db.execSQL(DBFinals.DBUser.DATABASE_TABLE_USER_CREATE); 

        } 

     

        /**

         * 重写onUpgrade方法,根据版本号不同(DBTABASE_VERSION)更新数据库

         */ 

        @Override 

        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

            db.execSQL("DROP TABLE IF EXISTS "+DBFinals.DBUser.DATABASE_TABLE_USER); 

            onCreate(db); 

        } 

    } 

 

 

 

1、  在这个类中,有一个内部类,叫做DatabaseHelper,继承自SQLiteOpenHelper。SQLiteOpenHelper是Google为我们准备好的用来连接、创建数据库的基类。我们只要重写其中的onCreate和onUpgrade方法,分别是用来创建数据库以及根据版本号更新数据库。建库的语句放在了DBFinals.DBUser.DATABASE_TABLE_USER_CREATE中作为一个常量。

 

 

 

2、  DBTool这个类,是我们用于进行数据库操作的类。

 

①   Open方法:创建DatabaseHelper对象,新建或者更新数据库,他的getWritableDatabase方法的作用是如果数据库不存在就建立一个,反之存在则根据版本更新。

 

 

 

②   Close方法:关闭DatabaseHelper对象建立的连接。

 

 

 

③   getAll方法:查询列表,这里重载了这个方法,一个是SQLiteDatabase对象自带的query方法,可以看出分别传入了不同的参数,其实类似于Hibernate或Linq。另一个方法rawQuery则是根据sql语句来进行查询。说实话,自己用后者更多一些!这两个方法返回的均是Cursor类型的指针。需要通过cusor. mCursor.moveToNext()移动指针来获取数据。

 

 

 

④   get方法:类似于查询列表,不过这里直接将返回的指针的第一条数据取了出来,而不是将整个Cursor指针列表返回。同样用两种方式重载。

 

 

 

⑤   update方法:更新数据,使用的是SQLiteDatabase对象自带的update方法,需要按规范传参数,返回布尔值。

 

 

 

⑥   create方法:与update方法类似,返回的是创建后的数据id,失败返回-1。

 

 

 

⑦   delete方法:与update方法类似。

 

 

 

具体的调用方法我们在将来的前台操作中再说,不过心急的朋友可以直接用用试试,基本上都是是网络和各种教程中比较常见的一些方法。

 

摘自 坏小子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中华字典项目是一个Android实战开发的应用程序,旨在为用户提供方便快捷地查询汉字的功能。 该应用程序的功能主要包括以下几个方面: 1. 汉字查询:用户可以通过输入汉字,快速查询其字义、读音以及常见的组词用法。应用程序通过与后台数据库的交互,实现了快速的查询,用户可以随时随地进行汉字的查询,提高了用户的查询效率。 2. 汉字笔顺查询:用户可以通过输入汉字,查询该汉字的笔画顺序以及笔画的书写方式。应用程序提供了清晰的笔画图示,并配有文字说明,帮助用户正确书写汉字。 3. 汉字造字规律查询:用户可以通过输入汉字,查询该汉字的造字规律。应用程序通过对大量的汉字进行分析,提供了汉字的起源、演变以及构造规律的解读,让用户更加深入地了解汉字的形成过程。 4. 常用词汇查询:用户可以通过输入拼音或者汉字,查询常用词汇的意思和用法。应用程序提供了大量的常用词汇,包括生活、工作、学习等方面的词汇,帮助用户扩展词汇量,提高语言达能力。 该应用程序的界面简洁明了,操作方便,用户可以根据需要自主选择查询功能。同时,该应用程序还支持收藏功能,用户可以将常用的查询结果收藏起来,方便快速查阅。 总之,中华字典项目是一个功能丰富、实用性强的Android应用程序,为用户提供了便捷、全面的汉字查询功能,帮助用户更好地了解和掌握汉字。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值