如题。我们做开发,使用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!