说到数据的存取,数据库肯定是一个常用的解决方案。Android中也有它自己的数据库,下面我们来看看Android中的数据库与一般的数据库有什么不一样的地方。
目前在Android系统中集成的是SQLite3版本,它支持SQL语句,它是一个轻量级的嵌入式数据库。SQLite支持NULL、INTEGER、REAL、TEXT和BLOB数据类型,不支持静态数据类型,而是使用列关系。可以把SQLite数据库近似看成是一种无数据类型的数据库,你可以把任何类型的资料存放在非Integer类型的主键之外的其他字段上去(字段的长度也是没有限度的)。不过建议一定要在编写SQL语句的时候,按照标准的SQL语法,因为这样在别人看你的代码时候,便于更好的理解。
SQLite的官方网站是htt://www.sqlite.org/,登陆该网站可以了解更多的关于SQLite的信息。
在Android开发中,一个SQLiteDatabase的实例代表了一个SQLite 的数据库,通过SQLiteDatabase 实例的一些方法,我们可以执行SQL 语句,对数据库进行增、删、查、改的操作。需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。下面的章节我们会详细说明数据库的操作。
经验分享: 数据库存储的位置在data/data/<项目文件夹>/databases/。有的时候我们可能需要查看数据库中的内容,这个时候我们可以将其拷贝出来,然后使用数据库工具进行查看。 另外,文件做为一个存储的载体,在大部分时候是有效的,但在某些情况下,文件存储会有问题,需要特别注意: 1)如果多线程数据访问是相关的。 2)如果应用程序处理可能变化的复杂数据结构。 |
我们要对数据库进行操作,那么首先要打开一个数据库,这里要用到一个类:android.database.sqlite.SQLiteOpenHelper。它封装了如何打开一个数据库,其中当然也包含如果数据库不存在就创建这样的逻辑。
// import略 public class DBOpenHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "myDataBaseName"; public static final int DATABASE_VERSION = 1 ; public static final String TABLE_NAME = "myTableName";
public DBOpenHelper(Context context) { super (context, DATABASE_NAME, null , DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE "+ TABLE_NAME + " (_id integer primary key autoincrement, name text);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS notes"); onCreate(db); } } |
下面对上述代码做一些说明。
onCreate(SQLiteDatabase):在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里边生成数据库表。
onUpgrade(SQLiteDatabase,int, int) :当数据库需要升级的时候,Android 系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。
除了上述两个方法以外,还有onOpen(SQLiteDatabase)可能也会用到,这是当打开数据库时的回调函数。