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

2019/10/19 20:26:10 来源:生活奇事网
   ANDROID开发:将数据库文件与项目包一起打包成APK文件

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

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

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

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

 

具体做法步骤如下:

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

 

[java] view plaincopy
  1. public class MyDataBaseAdapter {  
  2.     //used for print log  
  3.     private static final String TAG= "MyDataBaseAdapter";  
  4. //  public static final String KEY_ID="_id";  
  5.     public static final String KEY_ACCOUNT="account";  
  6.     public static final String KEY_PWD="password";  
  7.     //DB name  
  8.     private static final String DB_NAME="haodi.db";  
  9.     private static final int DB_VERSION=1;  
  10.     //DB tables  
  11.     private static final String DB_TABLE="users";  
  12.       
  13.     private static final String PRODUCTS_TABLE="products";  
  14.     public static final String PRODUCT_ID="_id";  
  15.     public static final String PRODUCT_NAME="name";  
  16.     public static final String PRODUCT_EFFECT="effect";  
  17.       
  18.     //local context object  
  19.     private Context mContext=null;  
  20.     //create tables command string.  
  21.     private static final String DB_CREATE="CREATE TABLE "  
  22.         + DB_TABLE +" ( "+ KEY_ACCOUNT + " VARCHAR(20) PRIMARY KEY , "    
  23.         +KEY_PWD+ " VARCHAR(20) )";  
  24.       
  25.     private static final String PROUDCTS_TABLE_CREATE=" CREATE TABLE "  
  26.         + PRODUCTS_TABLE + " ( " + PRODUCT_ID +" INTEGER PRIMARY KEY , "+  
  27.         PRODUCT_NAME+ " VARCHAR(20) , "  
  28.         +PRODUCT_EFFECT+" VARCHAR(30) )";  
  29.       
  30.       
  31.     //execute open() to open db, and save to return db object.  
  32.     private SQLiteDatabase mSQLiteDatabase = null;  
  33.     //inherited from SQLiteOpenHelper  
  34.     private DatabaseHelper mDatabaseHelper =null;  
  35.     private static class DatabaseHelper extends SQLiteOpenHelper{  
  36.         //constructor funtion- to create a db.  
  37.         DatabaseHelper(Context context){  
  38.             //create a db when invote getWritableDatabase()or getReadabledatabase().  
  39.             super(context, DB_NAME, null, DB_VERSION);  
  40.         }  
  41.         @Override  
  42.         public void onCreate(SQLiteDatabase db){  
  43.             //create a table when no.  
  44.             db.execSQL(DB_CREATE);  
  45.             db.execSQL(PROUDCTS_TABLE_CREATE);  
  46.         }  
  47.         //upgrade db.  
  48.         @Override  
  49.         public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){  
  50.             db.execSQL("DROP TABLE IF EXISTS users");  
  51. //          db.execSQL("DROP TABLE IF EXISTS"+ );  
  52.             onCreate(db);  
  53.         }  
  54.     }  
  55.       
  56.     //construct fun- get Context.  
  57.     public MyDataBaseAdapter(Context context){  
  58.         mContext=context;  
  59.     }  
  60.     //open db,return db obj.  
  61.     public void open() throws SQLException{  
  62.         mDatabaseHelper =new DatabaseHelper(mContext);  
  63.         mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();  
  64.     }  
  65.     public void close(){  
  66.         mDatabaseHelper.close();  
  67.     }  
  68.       
  69.     // for table users.  
  70.     public long insertData(String account, String pwd){  
  71.         ContentValues initialValues= new ContentValues();  
  72.         initialValues.put(KEY_ACCOUNT, account);  
  73.         initialValues.put(KEY_PWD, pwd);  
  74.         return mSQLiteDatabase.insert(DB_TABLE, null, initialValues);  
  75.     }  
  76.     public boolean deleteData(String account){  
  77.         return mSQLiteDatabase.delete(DB_TABLE,KEY_ACCOUNT+" = "+account,null)>0;  
  78.     }  
  79.     public Cursor fetchAllData(){  
  80.         return mSQLiteDatabase.query(DB_TABLE, new String[]{KEY_ACCOUNT,KEY_PWD}, nullnullnullnullnull);  
  81.     }  
  82.     public Cursor fetchData(String account){  
  83.         Cursor cursor=  
  84.             mSQLiteDatabase.query(DB_TABLE, new String[]{KEY_ACCOUNT,KEY_PWD}, KEY_ACCOUNT+" = '"+account+"'"nullnullnullnull);  
  85.         if (cursor!=null) {  
  86.             cursor.moveToFirst();  
  87.         }  
  88.         return cursor;  
  89.     }  
  90.     public boolean updateData(String account, String pwd){  
  91.         ContentValues args =new ContentValues();  
  92.         args.put(KEY_ACCOUNT, account);  
  93.         args.put(KEY_PWD, pwd);  
  94.         return mSQLiteDatabase.update(DB_TABLE, args, KEY_ACCOUNT+"="+account, null)>0;  
  95.     }  


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!        (转载)

3,970 ° 来自:PC 广东省深圳市
上一篇: 可视化编程
下一篇: IIS7.5提示无法写入配置文件web.config的解决方法

亲,沙发正空着,还不快来抢?

Back to Top