å
¶ä¸»è¦æè·¯æ¯ï¼
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);
try {
db.createDataBase();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
db.openDataBase(SQLiteDatabase.OPEN_READWRITE);
return db;
}
/**
*å建ä¸ä¸ªç©ºæ°æ®åºï¼ç¨æ¥åå¨ä½ å·²æçæ°æ®åºã
*/
public voidcreateDataBase() throws IOException{
boolean dbExist =checkDataBase();
if (dbExist) {
/*
**å¦æä½ çæ°æ®åºççæ¬æ¹åäºï¼è°ç¨è¿ä¸ªæ¹æ³ç¡®ä¿å¨onUpgrade()被è°ç¨æ¶
**ä¼ è¿å»çæ¯å¯åçæ°æ®åºã
*/
SQLiteDatabase db =this.getWritableDatabase();
if (db != null) {
db.close();
}
}
dbExist = checkDataBase();
if (!dbExist) {
try {
/*
** è°ç¨è¿ä¸ªæ¹æ³ä»¥ç¡®ä¿å¨ç¼ºçè·¯å¾å
产çä¸ä¸ªç©ºæ°æ®åºï¼ä»¥ä¾¿å¨å
¶åºç¡ä¸å¤å¶æ们已æçæ°æ®åºã
*/
SQLiteDatabase db =this.getReadableDatabase();
if (db != null) {
db.close();
}
copyDataBase();
}
catch (IOException e) {
Log.e("DB", e.getMessage());
throw new Error("Error copyingdatabase");
}
}
}
/**
* æ£æ¥æ°æ®åºæ¯å¦å·²åå¨ï¼ä»¥é¿å
éå¤å¤å¶ã
* @return true if it exists, false if itdoesn't
*/
private static booleancheckDataBase(){
SQLiteDatabase checkDB = null;
try {
String path = DB_PATH + DB_NAME;
checkDB =SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
}
catch (SQLiteException e){
//database does't exist yet.
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
/**
* æåå¨assetæ件ä¸çæ°æ®åºå¤å¶çåå建ç空æ°æ®åºä¸ã
* */
private voidcopyDataBase() throws IOException {
// åå建ç空æ°æ®åºçè·¯å¾
String outFileName = DB_PATH + DB_NAME;
// æå¼ç©ºæ°æ®åº
OutputStream output = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024*8];
AssetManager assetMgr =m_context.getAssets();
for (int i = 1; i <= DB_SPLIT_COUNT; i++){
// æå¼å解çassetæ件
String fn = DB_SPLIT_NAME +String.valueOf(i);
InputStream input = assetMgr.open(fn);
//Log.i("DB", "opened" + fn);
int length;
while ((length = input.read(buffer)) >0) {
//Log.i("DB", "read" + String.valueOf(length));
output.write(buffer, 0, length);
//Log.i("DB", "write" + String.valueOf(length));
}
input.close();
}
//Close the streams
output.flush();
output.close();
}
/**
温馨提示:答案为网友推荐,仅供参考