Android 數據庫打包隨APK發布
有些時候我們的軟件用到SQLite數據庫,這個時候怎么把一個做好的數據庫打包進我們的APK呢,其實很簡單,就是把我們的數據庫文件放到我們的手機里,所以不必局限在哪個地方寫這個代碼,在第一次創建數據庫的時候可以,我覺得在軟件起動頁里效果更好一點,首先我們應該把事先寫好的數據庫文件比如 test.db放到res文件夾里的raw文件夾里,也可以放到assets里,因為這兩個文件夾不會在生成APK的時候不會被壓縮
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream;import com.android.qufu.dinner.MealActivityGroup; import com.android.qufu.dinner.R;
import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView;
public class Loggin extends Activity { public static String dbName="dinner.db";//數據庫的名字 private static String DATABASE_PATH="/data/data/com.android.qufu.dinner/databases/";//數據庫在手機里的路徑 int alpha = 255; int b = 0;
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); //判斷數據庫是否存在 boolean dbExist = checkDataBase(); if(dbExist){ }else{//不存在就把raw里的數據庫寫入手機 try{ copyDataBase(); }catch(IOException e){ throw new Error("Error copying database"); } } new Thread(new Runnable() { public void run() { initApp(); //初始化程序 while (b < 2) { try { if (b == 0) { Thread.sleep(20); b = 1; } else { Thread.sleep(50); } updateApp(); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } public void updateApp() { alpha -= 5; if (alpha <= 0) { b = 2; if(true){ try{ Intent in = new Intent(Loggin.this,MealActivityGroup.class); Loggin.this.startActivity(in); Loggin.this.finish(); }catch(Exception e){ } } } } /** * 判斷數據庫是否存在 * @return false or true */ public boolean checkDataBase(){ SQLiteDatabase checkDB = null; try{ String databaseFilename = DATABASE_PATH+dbName; checkDB =SQLiteDatabase.openDatabase(databaseFilename, null, SQLiteDatabase.OPEN_READONLY); }catch(SQLiteException e){ } if(checkDB!=null){ checkDB.close(); } return checkDB !=null?true:false; } /** * 復制數據庫到手機指定文件夾下 * @throws IOException */ public void copyDataBase() throws IOException{ String databaseFilenames =DATABASE_PATH+dbName; File dir = new File(DATABASE_PATH); if(!dir.exists())//判斷文件夾是否存在,不存在就新建一個 dir.mkdir(); FileOutputStream os = null; try{ os = new FileOutputStream(databaseFilenames);//得到數據庫文件的寫入流 }catch(FileNotFoundException e){ e.printStackTrace(); } InputStream is = Loggin.this.getResources().openRawResource(R.raw.test);//得到數據庫文件的數據流 byte[] buffer = new byte[8192]; int count = 0; try{ while((count=is.read(buffer))>0){ os.write(buffer, 0, count); os.flush(); } }catch(IOException e){ } try{ is.close(); os.close(); }catch(IOException e){ e.printStackTrace(); } } /** * 初始化,這里是起始頁的沒有用 */ public void initApp(){ } } </pre>