第五章 以数据为中心—数据存取(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 那个几乎无法转让 想提前提现非常困难

网站链接 http://affiliate.lufax.com/action/36XBU

首次投资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的简单使用的例子,这里就不再举例说明。

时间: 2024-10-10 14:55:07

第五章 以数据为中心—数据存取(5)的相关文章

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

第五章以数据为中心-数据存取 典型的桌面操作系统提供一种公共文件系统--任何应用软件可以使用它来存储和读取文件,该文件也可以被其它的应用软件所读取(会有一些权限控制设定).而Android 采用了一种不同的系统.在Android 中,所有的应用软件数据(包括文件)为该应用软件所私有.然而,Android 同样也提供了一种标准方式供应用软件将私有数据开放给其它应用软件.这一章将描述一个应用软件存储和获取数据.开放数据给其他应用软件.从其他应用软件请求数据并且开放它们的多种方式. 可供选择的存储方式

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

5.1.2结构性的文件-读写XML文件 通过上面的介绍我们可以自由的操作Android中普通的文本文件了,下面我们来介绍下Android中比较常用的结构性的文件-XML文件. XML,可扩展标记语言(Extensible Markup Language),用于标记电子文件,使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. AndroidSDK提供了如下package来支持XML的读写: l  javax.xml  根据XML规范定义核心X

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

5.3安全方便简单-使用SharedPreferences 前面操作文件和数据库都相对比较复杂,需要打开,读取,关闭等等操作.可能有人就想,如果我只是需要存取几个简单的数据,有没有简单点的方法呢?的确,在Android中也封装了一种轻便的数据存取的方法-Preferences. Preferences是一种轻量级的数据存储机制,它将一些简单数据类型的数据,包括boolean类型.int类型.float类型.long类型以及String类型的数据,以键值对的形式存储在应用程序的私有Preferen

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

5.1.3自由操作随心所欲-序列化和反序列化 在Android开发中,除了经常会操作普通的文本文件和XML文件以外,也会经常使用序列化和反序列化的方式传递或者存取数据. Android序列化对象主要有两种方法,实现Serializable接口.或者实现Parcelable接口.实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在IPC中.实现Serializable接口非常简单,声

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

5.2通用的数据操作方式-数据库 说到数据的存取,数据库肯定是一个常用的解决方案.Android中也有它自己的数据库,下面我们来看看Android中的数据库与一般的数据库有什么不一样的地方. 5.2.1SQLite数据库介绍 目前在Android系统中集成的是SQLite3版本,它支持SQL语句,它是一个轻量级的嵌入式数据库.SQLite支持NULL.INTEGER.REAL.TEXT和BLOB数据类型,不支持静态数据类型,而是使用列关系.可以把SQLite数据库近似看成是一种无数据类型的数据库

第七章 以数据为中心的程序设计

本章介绍 ■ 表示和处理文档 ■ 设计不可变数据结构 ■ 数据表示形式之间的转换 ■ 使用记录和递归差别联合 在设计函数式程序时,首先要考虑的是程序处理的数据:由于重要的程序都使用数据,因此,在应用程序设计中,这个方面极为重要.用函数语言实现程序,我们也是从设计在代码中用到的数据结构开始:下一步才会写处理数据的运算. 但是不同于面向对象的设计,它是把数据封装在对象的状态中:处理用方法表示,是对象的一部分,在运算中还可以和其他有关对象进行交互.而大多数函数式程序是以数据为中心的,因此,数据与运算明

第五章 数据存储

第五章 数据存储 我们用解析器解析出数据之后,接下来的一步就是对数据进行存储了,保存的形式可以多种多样,最简单的形式可以直接保存为文本文件,如 TXT.Json.CSV 等等,另外还可以保存到数据库中,如关系型数据库 MySQL,非关系型数据库 MongoDB.Redis 等等.那么本章我们就来统一了解一下数据的保存方式. 5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1

第五章:大数据 の HBase 进阶

本课主题 HBase 读写数据的流程 HBase 性能优化和最住实践 HBase 管理和集群操作 HBase 备份和复制 引言 前一篇 HBase 基础 (HBase 基础) 简单介绍了NoSQL是什么和重点讨论 HBase 数据库的特点,在这一篇会进一步介绍 HBase 的其他特性和机制,比如读写数据的流程,在读写过程中 WAL,MemStore 的作用,还会谈谈一些数据缓存机制,明白在什么场景下需要用那一种缓存策略?如何对频繁使用的数据进行快速响应,从检索上提升查询效率和从内存层面上运用不同

大数据日知录【第五章:分布式协调系统】笔记--如何当选老大?如何加入组织?如何将组织的意愿传递下去

Chubby: 保持高可用性和可靠性,不追求读写的高吞吐量,所有的读写请求都有主控服务器完成,其他的备份服务器在内存中维护和主控服务器完全一致的树形结构,此时从属服务器的作用在于系统的整体的可靠性. Zookeeper: 每一个节点都可以处理读请求,写请求只能由主控服务器处理,此时从属服务器的作用在于提高系统读的吞吐量(有可能会导致读取的数据是老数据). Zookeeper主要应用场景: 选举老大 配置管理:配置文件存储在某个节点上,其他节点都是观察者,启东市可以读取也可以订阅改配置消息. 组成