Android数据库之创建和升级数据库(中)

上一篇文章中,简单介绍了一下android数据库的一些基本概念,那么从本节开始,就实战一下Android数据库的创建和升级。

上文中,也介绍了,SQLiteOpenHelper是一个抽象类,是我们用来创建和升级数据库的最佳实践。下面直接以代码方式,演示一下数据库的创建操作。

<span style="font-size:18px;">package com.happy.db.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * @Description: 数据库辅助类 主要完成数据库的创建以及升级
 */
public class MySQLiteOpenHelper extends SQLiteOpenHelper {

	private static final String DB_NAME = "test.db";
	private static final String TABLE_NAME = "user";
	private static final int DB_VERSION = 1;

	private static final String ID = "id";
	private static final String NAME = "name";
	private static final String GENDER = "gender";
	private static final String TELEPHONE = "telphone";

	// 创建数据库的sql语句
	private static final String CREATE_DB_SQL = "CREATE TABLE " + TABLE_NAME
			+ "(" + ID + " integer primary key autoincrement , " + NAME
			+ " text not null ," + GENDER + " text ," + TELEPHONE + " integer "
			+ ")";

	/**
	 * 构造方法
	 * 
	 * @param context
	 *            上下文
	 * @param name
	 *            数据库名
	 * @param factory
	 *            游标工厂
	 * @param version
	 *            数据库版本号
	 */
	public MySQLiteOpenHelper(Context context, String name,
			CursorFactory factory, int version) {
		super(context, DB_NAME, null, version);
	}

	/**
	 * 当磁盘上不存在数据库文件时,辅助类需要创建一个新数据时使用
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL(CREATE_DB_SQL);

	}

	/**
	 * 已经存在数据库,但是数据库版本不一样时调用(升级)
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}

}
</span>
如果我们直接运行我们的程序,会发现并没有把我们的数据库给创建出来。如果创建和访问数据库需要调用getReadableDatabase或getWritableDatabase来获取数据库只读或可写的实例。当我们调用执行完helper.getReadableDatabase();或helper.getWritableDatabase();后,数据库实例就被创建出来了。如图:

接着使用我们的SQLite Expert Professional 3打开次数据库,会看到数据结构如下:

这样我们便完成了数据库实例的创建。

下面,同样的方法介绍一下我们数据库版本的升级。

首先,定义我们升级数据库的sql语句,在这为user增加一列,并在upgrade中执行该sql。 

<span style="font-size:18px;">//升级数据库语句
	private static final String UPGRADE_SQL = "ALTER TABLE " + TABLE_NAME
			+ " ADD COLUMN " + " money float ";

	/**
	 * 已经存在数据库,但是数据库版本不一样时调用(升级)
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL(UPGRADE_SQL);

	}</span>
然后在我们的程序中执行如下代码:
<span style="font-size:18px;">case R.id.bt_upgrade_db://升级数据库
			helper = new MySQLiteOpenHelper(getApplicationContext(), "test.db", null, 2);
			helper.getReadableDatabase();
			break;</span>
这样,运行之后,便会将我们的数据库进行升级,再次将我们的数据库打开,会发现数据结构如下:



如此,便完成了我们数据库的升级逻辑。当然,在实际开发中,upgrade中不会简单执行一条的,需要对当前数据版进行判断,对于不同的数据库版本执行不同的sql语句。

当然,如果我们希望直接管理数据库的创建 打开和版本控制操作,而不是使用sqliteopenhelper,那么可以使用应用程序Context对象的openOrCreateDataBase方法来创建数据库本身。

<span style="font-size:18px;">Context context = getApplicationContext();
			SQLiteDatabase db = context.openOrCreateDatabase("test1.db",
					Context.MODE_PRIVATE, null);
			db.execSQL("create table student ( id integer primary key autoincrement , name text,sex text,mobile integer) ");</span>

 这样同样可以创建出来test1.db数据库,创建完成后记得使用数据库的exeSQL来根据执行创建和删除表的操作。

本文就简单介绍到这吧,都是挺浅的一些东西,也是我们Android中基本用到的创建和升级数据库的可选方案了。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。