安卓开发:Android创建和使用数据库详细指南


  数据库 支撑每个 利用程序无论大小的生命线,除非你的 利用程序只 解决 方便的数据,那么就需求一个数据库系统存储你的 构造化数据,Android 使用SQLite数据库,它是一个开源的、 支撑多操作系统的SQL数据库,在许多领域 宽泛 使用,如Mozilla FireFox便是 使用SQLite来存储配置数据的,iPhone也是 使用SQLite来存储数据的 。

  在Android中,你为某个 利用程序 缔造的数据库,惟独它 可以 拜访,其它 利用程序是不能 拜访的,数据库位于Android 设施/data/data/ /databases文件夹中,在这篇文章中,你将会学习到如何在Android中 缔造和 使用数据库 。

  SQLite数据库

   使用Eclipse 缔造一个Android 名目,取名为Database,如图1所示:

安卓开发:Android

图1 数据库- 使用Eclipse 缔造你的Android新 名目

     缔造DBAdapter辅助类

  操作数据库的最佳 实际是 缔造一个辅助类,由它封装全部对数据库的复杂 拜访,关于调用代码而言它是透明的, 因此我 缔造了一个DBAdapter的辅助类,由它 缔造、 打开、关闭和 使用SQLite数据库 。

  首先,在src/ 文件夹(在这个例子中是src/net.learn2develop.Database)下增加一个DBAdapter.java文件 。

  在DBAdapter.java文件中,导入全部你要 使用到的命名空间:

package net.learn2develop.Databases;

  

  import android.content.ContentValues;

  import android.content.Context;

  import android.database.Cursor;

  import android.database.SQLException;

  import android.database.sqlite.SQLiteDatabase;

  import android.database.sqlite.SQLiteOpenHelper;

  import android.util.Log;

  public class DBAdapter

  {

  }

  接下来 缔造一个数据库,取名为bookstitles,字段如图2所示 。

安卓开发:Android

图2 数据库字段

  在DBAdapter.java文件中,定义清单1中的常量 。

  清单1 定义DBAdapter.java文件中的常量

  package net.learn2develop.Database;

  import android.content.ContentValues;

  import android.content.Context;

  import android.database.Cursor;

  import android.database.SQLException;

  import android.database.sqlite.SQLiteDatabase;

  import android.database.sqlite.SQLiteOpenHelper;

  import android.util.Log;

  public class DBAdapter

  {

  public static final String KEY_ROWID = _id;

  public static final String KEY_ISBN = isbn;

  public static final String KEY_TITLE = title;

  public static final String KEY_PUBLISHER = publisher;

  private static final String TAG = DBAdapter;

  private static final String DATABASE_NAME = books;

  private static final String DATABASE_TABLE = titles;

  private static final int DATABASE_VERSION = 1;

  private static final String DATABASE_CREATE =

  create table titles (_id integer primary key autoincrement,

  + isbn text not null, title text not null,

  + publisher text not null);;

  private final Context context;

  }

  DATABASE_CREATE常量包含 缔造titles表的SQL语句 。

  在DBAdapter类中,你 可以 扩大SQLiteOpenHelper类,它是一个Android辅助类,重要用于数据库 缔造和版本治理 。实际上,你 可以 遮蔽onCreate()和onUpgrade() 步骤,如清单2所示 。

  清单2 在DBAdapter类中, 扩大SQLiteOpenHelper类 遮蔽onCreate() 和 onUpgrade() 步骤

  package net.learn2develop.Database;

  import android.content.ContentValues;

  import android.content.Context;

  import android.database.Cursor;

  import android.database.SQLException;

  import android.database.sqlite.SQLiteDatabase;

  import android.database.sqlite.SQLiteOpenHelper;

  import android.util.Log;

  public class DBAdapter

  {

  public static final String KEY_ROWID = _id;

  public static final String KEY_ISBN = isbn;

  public static final String KEY_TITLE = title;

  public static final String KEY_PUBLISHER = publisher;

  private static final String TAG = DBAdapter;

  private static final String DATABASE_NAME = books;

  private static final String DATABASE_TABLE = titles;

  private static final int DATABASE_VERSION = 1;

  private static final String DATABASE_CREATE =

  create table titles (_id integer primary key autoincrement,

  + isbn text not null, title text not null,

  + publisher text not null);;

  private final Context context;

  private DatabaseHelper DBHelper;

  private SQLiteDatabase db;

  public DBAdapter(Context ctx)

  {

  this.context = ctx;

  DBHelper = new DatabaseHelper(context);

  }

  private static class DatabaseHelper extends SQLiteOpenHelper

  {

  DatabaseHelper(Context context)

  {

  super(context, DATABASE_NAME, null, DATABASE_VERSION);

  }

  @Override

  public void onCreate(SQLiteDatabase db)

  {

  db.execSQL(DATABASE_CREATE);

  }

  @Override

  public void onUpgrade(SQLiteDatabase db, int oldVersion,

  int newVersion)

  {

  Log.w(TAG, Upgrading database from version  + oldVersion

  +  to

  + newVersion + , which will destroy all old data);

  db.execSQL("DROP TABLE IF EXISTS titles");

  onCreate(db);

  }

  }

  }

  onCreate() 步骤 缔造一个新的数据库,onUpgrade() 步骤用于 晋级数据库,这 可以通过 审查DATABASE_VERSION常量定义的值来实现,关于onUpgrade() 步骤而言,只是是 方便地删除表, 而后在 缔造表而已 。