下面具体说明如何进行添加、删除、修改的操作。下面我们将这些动作封装在一个类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(); } } } |
关于代码“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类的一些常用方法。
在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
上一节的示例中,我们看到了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的简单使用的例子,这里就不再举例说明。
原文地址:http://blog.csdn.net/arui319/article/details/43266781