ANDROID开发:将数据库文件与项目包一起打包成APK文件

如题。我们做开发,使用SQLITE数据库。完成开发后发布应用软件前,需要将数据库文件的数据作为基础数据与项目一起打包成APK文件发布。要达成这个目标,有几步要走:

1. 开发时创建数据库和数据表;

2. 开发时给数据库存入数据;

3. 开发完后 发布应用软件前 将数据库拷贝到项目包里,当用户安装时即可使用软件自带的数据库数据。

 

具体做法步骤如下:

1、创建数据库和数据表,使用DatabaseHelper类封装数据库操作。下面代码是封装好的操作数据库的类MyDataBaseAdapter。当需要操作数据库(增删查改功能)时,需要先打开数据库:MyDataBaseAdapter mybase=new MyDataBaseAdapter(this); mybase.open();

 

public class MyDataBaseAdapter {
	//used for print log
	private static final String TAG= "MyDataBaseAdapter";
//	public static final String KEY_ID="_id";
	public static final String KEY_ACCOUNT="account";
	public static final String KEY_PWD="password";
	//DB name
	private static final String DB_NAME="haodi.db";
	private static final int DB_VERSION=1;
	//DB tables
	private static final String DB_TABLE="users";
	
	private static final String PRODUCTS_TABLE="products";
	public static final String PRODUCT_ID="_id";
	public static final String PRODUCT_NAME="name";
	public static final String PRODUCT_EFFECT="effect";
	
	//local context object
	private Context mContext=null;
	//create tables command string.
	private static final String DB_CREATE="CREATE TABLE "
		+ DB_TABLE +" ( "+ KEY_ACCOUNT + " VARCHAR(20) PRIMARY KEY , "  
		+KEY_PWD+ " VARCHAR(20) )";
	
	private static final String PROUDCTS_TABLE_CREATE=" CREATE TABLE "
		+ PRODUCTS_TABLE + " ( " + PRODUCT_ID +" INTEGER PRIMARY KEY , "+
		PRODUCT_NAME+ " VARCHAR(20) , "
		+PRODUCT_EFFECT+" VARCHAR(30) )";
	
	
	//execute open() to open db, and save to return db object.
	private SQLiteDatabase mSQLiteDatabase = null;
	//inherited from SQLiteOpenHelper
	private DatabaseHelper mDatabaseHelper =null;
	private static class DatabaseHelper extends SQLiteOpenHelper{
		//constructor funtion- to create a db.
		DatabaseHelper(Context context){
			//create a db when invote getWritableDatabase()or getReadabledatabase().
			super(context, DB_NAME, null, DB_VERSION);
		}
		@Override
		public void onCreate(SQLiteDatabase db){
			//create a table when no.
			db.execSQL(DB_CREATE);
			db.execSQL(PROUDCTS_TABLE_CREATE);
		}
		//upgrade db.
		@Override
		public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
			db.execSQL("DROP TABLE IF EXISTS users");
//			db.execSQL("DROP TABLE IF EXISTS"+ );
			onCreate(db);
		}
	}
	
	//construct fun- get Context.
	public MyDataBaseAdapter(Context context){
		mContext=context;
	}
	//open db,return db obj.
	public void open() throws SQLException{
		mDatabaseHelper =new DatabaseHelper(mContext);
		mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
	}
	public void close(){
		mDatabaseHelper.close();
	}
	
	// for table users.
	public long insertData(String account, String pwd){
		ContentValues initialValues= new ContentValues();
		initialValues.put(KEY_ACCOUNT, account);
		initialValues.put(KEY_PWD, pwd);
		return mSQLiteDatabase.insert(DB_TABLE, null, initialValues);
	}
	public boolean deleteData(String account){
		return mSQLiteDatabase.delete(DB_TABLE,KEY_ACCOUNT+" = "+account,null)>0;
	}
	public Cursor fetchAllData(){
		return mSQLiteDatabase.query(DB_TABLE, new String[]{KEY_ACCOUNT,KEY_PWD}, null, null, null, null, null);
	}
	public Cursor fetchData(String account){
		Cursor cursor=
			mSQLiteDatabase.query(DB_TABLE, new String[]{KEY_ACCOUNT,KEY_PWD}, KEY_ACCOUNT+" = '"+account+"'", null, null, null, null);
		if (cursor!=null) {
			cursor.moveToFirst();
		}
		return cursor;
	}
	public boolean updateData(String account, String pwd){
		ContentValues args =new ContentValues();
		args.put(KEY_ACCOUNT, account);
		args.put(KEY_PWD, pwd);
		return mSQLiteDatabase.update(DB_TABLE, args, KEY_ACCOUNT+"="+account, null)>0;
	}


2、 运行后,便创建了数据库和数据表。这时为了更方便地插入数据,可以将生成的数据库导出来,使用SQLITE 的浏览器SQLite Database Browser 2.0 b1 打开,这样就可以向数据库和数据表中插入数据。插入数据后,再将数据库导入DDMS下的目录中。具体步骤如下:

    A。创建MyDataBaseAdapter类后,运行项目并想方法new 它,这样生成了数据库haodi.db。在MyEclipse中打开DDMS视图模式,在FileExplore下,有许多目录,打开目录 data/data/test.com/database,就可以看到haodi.db数据库文件,如下图。 test.com 即是你项目包名。

 

    B。导出数据库文件进行编辑。点击上图右上角的向左按钮,就可导出到桌面。再用SQLITE数据库浏览器打开导出的数据库文件haodi.db进行编辑,如插入数据等。

    C。将编辑好的数据库文件导入回DDMS目录下。点击右上角的向右按钮即可,覆盖原来的haodi.db文件。

这样数据库中就有你编辑好的数据了。

 

3、将数据库文件haodi.db拷贝到你项目res/raw 目录下。如果没有raw文件夹,就新建一个。目录结构如下图:

4、在刚打开应用软件时,使用代码将res/raw下的数据库文件复制到手机SD卡 data/data/test.com/database 目录下。代码可参考http://www.oschina.net/code/snippet_203635_9207。

 

5、打包项目APK文件,这样用户安装后就可以使用haodi.db数据库文件中的数据了。搞定!

 

PS:

1.创建数据表一定要有_id字段---如果你需要使用SimpleCursorAdapter的话,并且fetchData()的返回值中应该有_id字段的内容,不然会报如下错误: column '_id' does not exist。

 

 ALL RIGHTS RESERVE!

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Android)