日期:2014-05-16  浏览次数:20357 次

如何在Android应用中使用已有的Sqlite数据库

在我几个Android应用中,我需要访问已有的数据库。这些数据库往往很大,甚至超过asset文件大约1兆字节的限制。而且在新的版本中数据库需要更新。我在网上,特别是StackOverflow看了一些文章,并做了一些试验,觉得下面的代码能基本上满足我的需求。

其主要思路是:

1.   把数据库分解成几个asset文件。

2.   当需要打开数据库时,如果数据库不存在,就把那几个asset文件重新合并成一个数据库文件。

3.   如果数据库的版本改变了,就在onUpgrade()方法中把数据库文件删除掉。

 

下面是代码:

 

//数据库的缺省路径

private static finalString DB_PATH = "/data/data/com.mypackage.myapp/databases/";

private static finalString DB_NAME = "mydb.db";

private static finalint DB_VERSION = 2;

private static finalString DB_SPLIT_NAME = "mydb.db.00";

private static finalint DB_SPLIT_COUNT = 3;

private SQLiteDatabasem_database;

private final Contextm_context;

/**

 * Constructor

 *保存传进来的context参数以用来访问应用的asset和资源文件。

 * @param context

 */

public MyDB(Contextcontext) {

 super(context, DB_NAME, null, DB_VERSION);

 this.m_context = context;

}

public static MyDBopenDatabaseReadOnly(Context context) {

 MyDB db = new MyDB(context);

 

 try {

 db.createDataBase();

 } catch (IOException e) {

 // TODO Auto-generated catch block

 e.printStackTrace();

 }

 

 db.openDataBase(SQLiteDatabase.OPEN_READONLY);

 return db;

}

public static MyDBopenDatabaseReadWrite(Context context) {

 MyDB db = new MyDB(context);

 

&nbs