严谨一点说,SQLite在Android设备中可以被当做是一种数据存储方法或者干脆是一个数据库

  正如其他大多数平台一样,Android 也提供了几种方法用来保存数据,使得这些数据即使在程序结束以后依然不会丢失。这些方法有:文本文件-可以保存在应用程序自己的目录下(【译者注】安装的每个app都会在/data/data/目录下创建个文件夹,名字和应用程序中AndroidManifest.xml文件中的package一样),也可以保存在SDcard中;Preferences也是一种经常使用的数据存储方法,因为它们对于用户而言是透明的,并且从应用安装的时候存在了;另外,如果放宽点说的话,Assets也可以用来存储一些只读数据。Assets是指那些在assets目录下的文件,这些文件在你将你的应用编译打包之前要存在,并且可以在应用程序运行的时候被访问到。以后我会更加详细的聊聊这些方法的细节。

  然而,有时候我们需要对保存的数据进行一些复杂的操作,或者数据量很大,超出了文本文件和Preference的性能能hold住的范围,所以需要一些更加高效的方法来管理。这时需要一个移动平台上的数据库闪亮登场了。

  从Android1.5(代号Cupcake)开始,Android自带SQLite(版本3.5.9+)了。如果你对SQLite不熟悉的话,把它当成是一个独立的,无需服务进程,支持事务处理,可以使用SQL语言的数据库。尽管SQLite也有它的不足之处,但是在Android开发者的武器库里,可以算是个杀手锏了。

  本文中,我主要介绍在Android中使用SQLite的方法,着重介绍它的管理操作,具体而言,是创建和更新(update)(【译者注】这里说的更新操作不是说使用update语句更新数据库数据的操作,而是修改数据库结构的操作,本文中的update和upgrade都是这个意思,为避免混淆,后注原英文使用动词),而不是那些运行时的操作。

  管理SQLite

  我们可以从创建一个继承自SQLiteOpenHelper的类来管理SQLite开始探讨这一话题,这个类有一个构造方法和另外两个必须实现的方法,onCreate和onUpgrade方法.

  很自然的,这些方法中第一个被执行的是构造方法,在构造函数中调用父类的构造方法,同时传入四个参数:

  Context, 这表示应用程序的上下文,在构造函数中保存住,对以后的其他操作有用。

  数据库名称,是个文件名,表示数据库物理文件名称的字符串。

  游标factory,如果提供的话,可以用来创建游标。

  数据库版本,这是你的数据库的版本(用一个整数表示),稍后我会讨论这个参数的细节。初始值为1。

  在我们的例子中,我们的四个参数如下面代码所示:
 
class DB extends SQLiteOpenHelper {
 
  final static int DB_VERSION = 1;
  final static String DB_NAME = "mydb.s3db";
  Context context;
 
  public DB(Context context) {
      super(context, DB_NAME, null, DB_VERSION);
      // Store the context for later use
      this.context = context;
}