Android中SQLite应用详解(2)

2019-01-26 21:52

db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);

上面几种都是常用的查询方法,第一种最为简单,将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数,selectionArgs就是占位符实际参数集;下面的几种参数都很类似,columns表示要查询的列所有名称集,selection表示WHERE之后的条件语句,可以使用占位符,groupBy指定分组的列名,having指定分组条件,配合groupBy使用,orderBy指定排序的列名,limit指定分页参数,distinct可以指定“true”或“false”表示要不要过滤重复值。需要注意的是,selection、groupBy、having、orderBy、limit这几个参数中不包括“WHERE”、“GROUP BY”、“HAVING”、“ORDER BY”、“LIMIT”等SQL关键字。 最后,他们同时返回一个Cursor对象,代表数据集的游标,有点类似于JavaSE中的ResultSet。

下面是Cursor对象的常用方法:

[java]view plaincopyprint?

1. c.move(int offset); //以当前位置为参考,移动到指定行 2. c.moveToFirst(); //移动到第一行 3. c.moveToLast(); //移动到最后一行

4. c.moveToPosition(int position); //移动到指定行 5. c.moveToPrevious(); //移动到前一行 6. c.moveToNext(); //移动到下一行 7. c.isFirst(); //是否指向第一条 8. c.isLast(); //是否指向最后一条 9. c.isBeforeFirst(); //是否指向第一条之前 10. c.isAfterLast(); //是否指向最后一条之后

11. c.isNull(int columnIndex); //指定列是否为空(列基数为0) 12. c.isClosed(); //游标是否已关闭 13. c.getCount(); //总数据项数

14. c.getPosition(); //返回当前游标所指向的行数

15. c.getColumnIndex(String columnName);//返回某列名对应的列索引值 16. c.getString(int columnIndex); //返回当前行指定列的值

c.move(int offset); c.moveToFirst(); c.moveToLast();

//以当前位置为参考,移动到指定行 //移动到第一行 //移动到最后一行

//移动到指定行

c.moveToPosition(int position);

c.moveToPrevious(); c.moveToNext(); c.isFirst(); c.isLast();

//移动到前一行 //移动到下一行 //是否指向第一条 //是否指向最后一条 //是否指向第一条之前 //是否指向最后一条之后

//指定列是否为空(列基数为0)

//游标是否已关闭 //总数据项数

//返回当前游标所指向的行数

c.isBeforeFirst(); c.isAfterLast(); c.isClosed(); c.getCount(); c.getPosition();

c.isNull(int columnIndex);

c.getColumnIndex(String columnName);//返回某列名对应的列索引值 c.getString(int columnIndex); //返回当前行指定列的值

在上面的代码示例中,已经用到了这几个常用方法中的一些,关于更多的信息,大家可以参考官方文档中的说明。

最后当我们完成了对数据库的操作后,记得调用SQLiteDatabase的close()方法释放数据库连接,否则容易出现SQLiteException。

上面就是SQLite的基本应用,但在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法。

下面,我们就以一个实例来讲解具体的用法,我们新建一个名为db的项目,结构如下:

其中DBHelper继承了SQLiteOpenHelper,作为维护和管理数据库的基类,DBManager是建立在DBHelper之上,封装了常用的业务方法,Person是我们的person表对应的JavaBean,MainActivity就是我们显示的界面。 下面我们先来看一下DBHelper:

[java]view plaincopyprint?

1. package com.scott.db; 2.

3. import android.content.Context;

4. import android.database.sqlite.SQLiteDatabase; 5. import android.database.sqlite.SQLiteOpenHelper; 6.

7. public class DBHelper extends SQLiteOpenHelper { 8.

9. private static final String DATABASE_NAME = \10. private static final int DATABASE_VERSION = 1; 11.

12. public DBHelper(Context context) { 13. //CursorFactory设置为null,使用默认值

14. super(context, DATABASE_NAME, null, DATABASE_VERSION); 15. } 16.

17. //数据库第一次被创建时onCreate会被调用 18. @Override

19. public void onCreate(SQLiteDatabase db) {

20. db.execSQL(\

21. \

age INTEGER, info TEXT)\22. } 23.

24. //如果DATABASE_VERSION值被改为2,系统发现现有数据库版本不同,即会调用

onUpgrade 25. @Override

26. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVe

rsion) {

27. db.execSQL(\28. } 29. }

package com.scott.db;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper { }

正如上面所述,数据库第一次创建时onCreate方法会被调用,我们可以执行创建表的语句,当系统发现版本变化之后,会调用onUpgrade方法,我们可以执行修改表结构等语句。 为了方便我们面向对象的使用数据,我们建一个Person类,对应person表中的字段,如下:

[java]view plaincopyprint?

private static final String DATABASE_NAME = \private static final int DATABASE_VERSION = 1;

public DBHelper(Context context) { }

//数据库第一次被创建时onCreate会被调用 @Override

public void onCreate(SQLiteDatabase db) { }

//如果DATABASE_VERSION值被改为2,系统发现现有数据库版本不同,@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int }

db.execSQL(\db.execSQL(\

\INTEGER PRIMARY KEY AUTOINCREMENT,

//CursorFactory设置为null,使用默认值

super(context, DATABASE_NAME, null, DATABASE_VERSION);

name VARCHAR, age INTEGER, info TEXT)\

即会调用onUpgrade

newVersion) { STRING\

1. package com.scott.db; 2.

3. public class Person { 4. public int _id; 5. public String name; 6. public int age; 7. public String info; 8.

9. public Person() { 10. } 11.

12. public Person(String name, int age, String info) { 13. this.name = name; 14. this.age = age; 15. this.info = info; 16. } 17. }

package com.scott.db;

public class Person { }

然后,我们需要一个DBManager,来封装我们所有的业务方法,代码如下:

public int _id; public String name; public int age; public String info;

public Person() { }

public Person(String name, int age, String info) { }

this.name = name; this.age = age; this.info = info;


Android中SQLite应用详解(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新环保法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: