第五章 以数据为中心—数据存取(5)

5.2.3 添加、删除和修改操作

下面具体说明如何进行添加、删除、修改的操作。下面我们将这些动作封装在一个类DBHelper中,通过这个类的几个方法,可以具体看到如何进行数据库的各种操作。

// import略

public class DBHelper {

 

    private static final String[] COLS = new String[] { "_id","name"};

    private SQLiteDatabase db;

    private final DBOpenHelper dbOpenHelper;

 

    public DBHelper(final Context context) {

        this.dbOpenHelper = new DBOpenHelper(context);

        establishDb();

    }

    /**

     * 得到一个可写的SQLite 数据库,如果这个数据库还没有建立,

     * 那么DBOpenHelper辅助类负责建立这个数据库。

     * 如果数据库已经建立,那么直接返回一个可写的数据库。

     */

    private void establishDb() {

        if (this.db == null) {

             this.db = this.dbOpenHelper.getWritableDatabase();

        }

    }

    /**

     * 关闭数据库

     */

           public void cleanup() {

        if (this.db != null) {

             this.db.close();

             this.db = null;

        }

    }

    /**

     * 插入一条数据

     */

    public void insert(String id,String name) {

        ContentValues values = new ContentValues();

        values.put("_id", id);

        values.put("name", id);

        this.db.insert(DBOpenHelper.TABLE_NAME, null, values);    

        cleanup();

    }

    /**

     * 更新一条数据

     */

    public void update(String id,String name) {

        ContentValues values = new ContentValues();

        values.put("_id", id);

        values.put("name", id);

        this.db.update(DBOpenHelper.TABLE_NAME, values, "_id=" + id,null);

        cleanup();

    }

    /**

     * 删除一条数据

     */

    public void delete(final long id) {

        this.db.delete(DBOpenHelper.TABLE_NAME, "_id=" + id, null);

    }

    /**

     * 删除所有数据

     */

    public void deleteAll() {

        this.db.delete(DBOpenHelper.TABLE_NAME, null, null);

    }

    private void query() {

        // 得到一个可写的数据库。

        SQLiteDatabase db = dbOpenHelper.getReadableDatabase();

        // 进行数据库查询

        Cursor cur = db.query(DBOpenHelper.TABLE_NAME, COLS, null, null, null, null, null);

        if(cur != null) {

            for(cur.moveToFirst();!cur.isAfterLast();cur.moveToNext()) {

                int idColumn = cur.getColumnIndex(COLS[0]);

                int nameColumn = cur.getColumnIndex(COLS[1]);

                String id = cur.getString(idColumn);

                String name = cur.getString(nameColumn);

            }

cur.close();

        }

    }

}

 

--------------------------------------------
程序员赚钱不易 一定要学会理财
平安陆金所 隶属于平安集团的p2p平台
年投资回报率7%-9% 是替代银行理财的首选
个人经验 推荐投资安鑫或者有担保的彩虹项目
不要投资安e 那个几乎无法转让 想提前提现非常困难
首次投资1000元即可额外赚几百元 不赚白不赚
--------------------------------------------

关于代码“Cursor cur = db.query(DBOpenHelper.TABLE_NAME, COLS, null, null,null, null, null);”是将查询到的数据放到一个Cursor当中。这个Cursor 里边封装了这个数据表TABLE_NAME 当中的所有条列。query()方法相当的有用,在这里我们简单的讲一下query中的参数。

第一个参数是数据库里边表的名字,比如在我们这个例子,表的名字就是TABLE_NAME,也就是" myTableName "。

第二个参数是我们想要返回数据包含的列的信息。在这个例子当中我们想要得到的列有id、name。我们把这两个列的名字放到字符串数组里边来。

第三个参数为selection,相当于sql语句的where部分,如果想返回所有的数据,那么就直接置为null。

第四个参数为selectionArgs,在selection部分,你有可能用到”?”,那么在selectionArgs定义的字符串会代替selection中的”?”。

第五个参数为groupBy,定义查询出来的数据是否分组,如果为null则说明不用分组。

第六个参数为having,相当于sql 语句当中的having部分。

第七个参数为orderBy,来描述我们期望的返回值是否需要排序,如果设置为null则说明不需要排序。

Integernum = cur.getCount();通过getCount()方法,可以得到cursor 当中数据的个数。

下面我们来介绍Cursor类的一些常用方法。

5.2.4游标的操作—使用Cursor

在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。

上一节的示例中,我们看到了Cursor,这就是游标。我们可以简单的将Cursor理解成指向数据库中某一行数据的对象。在Android中,查询数据库是通过Cursor类来实现的。当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如表5-2所示。

方法

返回值

说明

close()

void

关闭游标,释放资源

copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)

void

在缓冲区中检索请求的列的文本,将将其存储

getColumnCount()

int

返回所有列的总数

getColumnIndex(String columnName)

int

返回指定列的名称,如果不存在返回-1

getColumnIndexOrThrow(String columnName)

int

从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常

getColumnName(int columnIndex)

String

从给定的索引返回列名

getColumnNames()

String[]

返回一个字符串数组的列名

getCount()

int

返回Cursor中的行数

moveToFirst()

boolean

移动光标到第一行

moveToLast()

boolean

移动光标到最后一行

moveToNext()

boolean

移动光标到下一行

moveToPosition(int position)

boolean

移动光标到一个绝对的位置

moveToPrevious()

boolean

移动光标到上一行

isBeforeFirst()

boolean

返回游标是否指向之前第一行的位置

isAfterLast()

boolean

返回游标是否指向最后一行的位置

isClosed()

boolean

如果返回true即表示该游标己关闭

表5-2 Cursor的方法

 

    由于上一节的代码示例中已经包含了Cursor的简单使用的例子,这里就不再举例说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值