ContentProvider和SQLite数据库

源地址: http://www.vogella.com/tutorials/AndroidSQLite/article.html

1.SQLite 和 Android

1.1 什么是SQLite?

SQLite是开源数据库。SQLite支持标准的关系数据库的特性,例如SQL语法,事务操作,prepared statement. 只需要很少的运行内存(大概250k),很适合嵌入到一些应用程序中。
SQLite支持的数据类型有:TEXT(类似java中的String)、INTEGER(类似java中的long)、和REAL(类似java中的double)。所有的类型在存入数据中前必须先转换成这几种类型。数据库自己不会去检查写入的数据是否是对应的数据类型,例如,你可以讲一个integer类型数据写入到string条目中,相反也可以。
更多关于SQLite的信息,可以访问SQLite网站:http://www.sqlite.org

1.2 Android中的SQLite

SQLite被嵌入在每一个Android设备中。在Android中使用SQLite数据库,不需要安装也不需要管理员权限。
你只需要定义创建和更新数据库的语句。然后Android系统会自动帮你维护这个数据库。
对SQLite数据库的访问需要访问文件系统。这可能比较慢。因此推荐异步执行数据库操作。
如果你的应用创建了数据库,那么数据库被默认保存在这个目录下:DATA/data/APP_NAME/databases/FILENAME
上面的数据库路径会符合这么几个规则:DATAEnvironment.getDataDirectory()方法返回的路径。APP_NAME是应用名字。FILENAME是你在代码中为数据库指定的名字。

2.看这篇教程的必要基础

掌握Android开发的基础知识。

3.SQLite知识结构

3.1 有关的包

android.database包 包括所有和数据库操作相关的类。android.database.sqlite包括和SQLite相关的类。

3.2 使用SQLiteOpenHelper来创建和更新数据库

可以通过创建一个继承SQLiteOpenHelper类的子类来创建和升级数据库。在类的构造函数中调用SQLiteOpenHelpersuper()方法,指定数据库的名字和当前版本。
在这个新创建的类中,你需要覆盖这么几个方法来创建和更新数据库:

  • onCreate() - 如果数据库还没有创建,会被调用。
  • onUpgrade() - 如果数据库版本升级会被调用。这个方法允许你更新当前数据库的机构或者删掉当前的数据库使用onCreate()重新创建数据库。

两个方法都会收到SQLiteDatabase对象作为参数,是数据库的java封装。
SQLiteOpenHelper提供两个方法getReadableDatabase()getWriteableDatabase()来获取SQLiteDatabase对象,用于从数据库中读取信息或者写入数据库。
数据库表中,应该用_id来作为键值。几个Android功能依赖这一设定。

窍门:每个表建立一个类是个很好的编程习惯。这个类定义静态的onCreate()方法和onUpgrade()方法。在SQLiteOpenHelper对应的方法中调用这些方法。这样即使你有多个表,也可以保持SQLiteOpenHelper实现类的可读性。

3.3 SQLiteDatabase

SQLiteDatabase是Android中操作SQLite数据库的基础类,它提供了方法去打开、查询、更新和关闭数据库。
特定的,SQLiteDatabase提供了insert()update()delete()等方法。
另外还提供了execSQL()方法,来直接执行一个SQL语句。
ContentValues对象可以用来定义键值对。键代表数据库表中某一条目的标识符,值代表数据库某一行纪录中这个条目对应的内容。ContentValues可以用来插入或者更新数据库。
查询可以通过rawQuery()或者query()来完成。或者通过SQLiteQueryBuilder类来完成。
rawQuery()直接接受select查询语句。
query()提供一个指定SQL查询的接口。
SQLiteQueryBuilder是一个很方便构建SQL查询的类。

3.4 rawQuery()示例

下面是一个rawQuery()调用例子:

Cursor cursor = getReadableDatabase().
    rawQuery("select * from todo where _id = ?", new String[] { id });

3.5 query()示例

下面是一个query()例子:

return database.query(DATABASE_TABLE, 
    new String[] { KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY, KEY_DESCRIPTION },
     null, null, null, null, null);

方法query()有下面这几个参数:表 1. 方法query()的参数

参数 解释
String dbName 需要查询的数据库表
String[] columnNames 查询需要返回的列名集合,null表示所有列
String whereClause Where-clause,也就是过滤出需要返回的条目,null会选择所有条目
String[] selectionArgs whereClause中可能包括?占位符,这些占位符会被selectionArgs数组中的值代替
String[] groupBy 表示如何将结果分组,null表示不分组
String[]
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值