数据操作是指对数据的添加、删除、查找和更新(CRUD)的操作。通过执行SQL命名完成数据操作,但推荐使用Android提供的专用类和方法,这些类和方法更加简洁、易用。
在上述实现了创建数据库的DBAdapter类的基础上,为了使DBAdapter类支持对数据的添加、删除、更新和查找等功能,在DBAdapter类中增加下面的这些方法: □ insert(People people)用来添加一条数据。 □ queryAllData()用来获取全部数据。 □ queryOneData(long id)根据id获取一条数据。 □ deleteAllData()用来删除全部数据。 □ deleteOneData(long id)根据id删除一条数据。 □ updateOneData(long id , People people)根据id更新一条数据。 代码清单7-37 DBAdapter
public class DBAdapter { public long insert(People people) {} public long deleteAllData() { } public long deleteOneData(long id) { } public People[] queryAllData() {} public People[] queryOneData(long id) { } public long updateOneData(long id , People people){ } private People[] ConvertToPeople(Cursor cursor){} } 其中,ConvertToPeople(Cursor cursor)是私有方法,作用是将查询结果转换为用来存储数据的自定义People类对象。 首先就来介绍一下自定义的People类。People类包含4个公共属性,分别为ID、Name、Age和Height,对应数据库中的4个属性值。覆盖Object中的toString()方法,主要是为了便于界面显示的需要。People类的代码如代码清单7-38所示。 代码清单7-38 People类
public class People { public int ID = -1; public String Name; public int Age; public float Height; @Override public String toString(){ String result = “”; result += “ID:” + this.ID + “,”; result += “姓名:” + this.Name + “,”; result += “年龄:” + this.Age + “, “; result += “身高:” + this.Height + “,”; return result; } } 下面分别介绍如何使用SQLiteDatabase类的公共方法,完成数据的添加、删除、更新和查询等数据操作。 SQLiteDatabase类的公共方法insert()、delete()、update()和query(),封装了执行的添加、删除、更新和查询功能的SQL命令。 1.添加功能 首先构造一个ContentValues对象;其次调用ContentValues对象的put()方法,将每个属性的值写入ContentValues对象中;最后使用SQLiteDatabase对象的insert()方法,将ContentValues对象中的数据写入指定的数据库表中。 insert()方法的返回值是新数据插入的位置,即ID值。ContentValues类是一个数据承载容器,主要用来向数据库表中添加一条数据。 代码清单7-39 insert
public long insert(People people) { ContentValues newValues = new ContentValues(); newValues.put(KEY_NAME, people.Name); newValues.put(KEY_AGE, people.Age); newValues.put(KEY_HEIGHT, people.Height); return db.insert(DB_TABLE, null, newValues); } 在上述代码中,第4行代码向ContentValues对象newValues中添加一个名称/值对,put()方法的第1个参数是名称,第2个参数是值;在第8行代码的insert()方法中,第1个参数是数据表的名称,第2个参数是在NULL时的替换数据,第3个参数是需要向数据库表中添加的数据。 2.删除功能 删除数据比较简单,只需要调用当前数据库对象的delete()方法,并指明表名称和删除条件即可。 代码清单7-40 删除
public long deleteAllData() { return db.delete(DB_TABLE, null, null); } public long deleteOneData(long id) { return db.delete(DB_TABLE, KEY_ID + “=” + id, null); } 其中,delete()方法的第1个参数是数据库的表名称,第2个参数是删除条件。在第2行代码中,删除条件为null,表示删除表中的所有数据;第6行代码指明了需要删除数据的id值,因此deleteOneData()方法仅删除一条数据,此时delete()方法的返回值表示被删除的数据的数量。 3.更新功能 更新数据同样要使用ContentValues对象,首先构造ContentValues对象,其次调用put()方法将属性的值写入ContentValues对象中,最后使用SQLiteDatabase对象的update()方法,并指定数据的更新条件。 代码清单7-41 更新
public long updateOneData(long id , People people){ ContentValues updateValues = new ContentValues(); updateValues.put(KEY_NAME, people.Name); updateValues.put(KEY_AGE, people.Age); updateValues.put(KEY_HEIGHT, people.Height); return db.update(DB_TABLE, updateValues, KEY_ID + “=” + id, null); } 在代码的第7行中,update()方法的第1个参数表示数据表的名称,第2个参数是更新条件,update()方法的返回值表示数据库表中被更新的数据数量。 4.查询功能 首先介绍Cursor类。在Android系统中,数据库查询结果的返回值并不是数据集合的完整复制,而是返回数据集的指针,这个指针就是Cursor类。Cursor类支持在查询的数据集合中多种移动方式,并能够获取数据集合的属性名称和序号。 Cursor类的方法和说明如表7-8所示。 表7-8 Cursor类的方法和说明
从Cursor中提取数据可以参考ConvertToPeople()方法的实现方法,具体代码如代码清单7-42所示。 代码清单7-42 从Cursor中提取数据
private People[] ConvertToPeople(Cursor cursor){ int resultCounts = cursor.getCount(); if (resultCounts == 0 || !cursor.moveToFirst()){ return null; } People[] peoples = new People[resultCounts]; for (int i = 0 ; i<resultCounts; i++){ peoples[i] = new People(); peoples[i].ID = cursor.getInt(0); peoples[i].Name=cursor.getString(cursor.getColumnIndex(KEY_NAME)); peoples[i].Age = cursor.getInt(cursor.getColumnIndex(KEY_AGE)); peoples[i].Height=cursor.getFloat(cursor.getColumnIndex(KEY_HEIGHT)); cursor.moveToNext(); } return peoples; } 在提取Cursor数据的数据前,推荐测试Cursor中的数据数量,避免在数据获取中产生异常,例如,代码的第3行到第5行。从Cursor中提取数据使用类型安全的get<Type>()方法,方法的输入值为属性的序号,为了获取属性的序号,可以使用getColumnIndex()方法获取指定属性的序号,如代码的第10行到第12行。 要进行数据查询就需要调用SQLiteDatabase类的query()方法,query()方法的语法如代码清单7-43所示。 代码清单7-43 query语法
Cursor android.database.sqlite.SQLiteDatabase.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) query()方法的参数说明如表7-9所示。 表7-9 query()方法的参数
根据id查询数据的代码如代码清单7-44所示。 代码清单7-44 根据id查询数据的代码
public People[] getOneData(long id) { Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT}, KEY_ID + “=” + id, null, null, null, null); return ConvertToPeople(results); } 查询全部数据的代码如代码清单7-45所示。 代码清单7-45 查询全部数据的代码
public People[] getAllData() { Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT}, null, null, null, null, null); return ConvertToPeople(results); } |
||||||||||||||||||||||||||||||||||||||||||||||
|
文章转自:华清远见移动互联网学院,原文地址:http://www.3g-edu.org/news/art160.htm 更多相关资料点击:免费资料
来源URL:http://fasight001.spaces.eepw.com.cn/articles/article/item/96885