Android Sqlite 資料初始化

來源:互聯網
上載者:User

android系統下每個程式的資料存放在 /data/data/(package name)/ 目錄下,資料庫則是在/dababases/目錄下..
所以,你只要用FileInputStream讀取原資料庫,再用FileOutputStream把讀取到的東西寫入到那個目錄就可以了..

操作方法:1. 把原資料庫包括在項目源碼的 res/raw 目錄下.
2.建立一個類來控制database..如下:

 

public class DatabaseManager{
        private final int BUFFER_SIZE = 400000;
        public static final String DB_NAME = "myDatabase.db"; //儲存的資料庫檔案名
        public static final String PACKAGE_NAME = "com.android.ImportDBTest";//包名
        public static final String DB_PATH = "/data"
                        + Environment.getDataDirectory().getAbsolutePath() + "/"
                        + PACKAGE_NAME;  //在手機裡存放資料庫的位置

        private SQLiteDatabase database;
        private Context context;

        DBManager(Context context) {
                this.context = context;
        }

        public void openDatabase() {
                this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);
        }

        private SQLiteDatabase openDatabase(String dbfile) {
                try {
                        if (!(new File(dbfile).exists())) {  //判斷資料庫檔案是否存在,若不存在則執行匯入,否則直接開啟資料庫
                                InputStream is = this.context.getResources().openRawResource(
                                                R.raw.myDatabase); //欲匯入的資料庫
                                FileOutputStream fos = new FileOutputStream(dbfile);
                                byte[] buffer = new byte[BUFFER_SIZE];
                                int count = 0;
                                while ((count = is.read(buffer)) > 0) {
                                        fos.write(buffer, 0, count);
                                }
                                fos.close();
                                is.close();
                        }
                        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,
                                        null);
                        return db;
                } catch (FileNotFoundException e) {
                        Log.e("Database", "File not found");
                        e.printStackTrace();
                } catch (IOException e) {
                        Log.e("Database", "IO exception");
                        e.printStackTrace();
                }
                return null;
}

 

然後在需要用到資料庫的時候,用執行個體化一個DatabaseManager類,調用其openDatabase方法就可以返回一個SQLiteDatabase對象了..如下:

 

SQLiteDatabase db = new DBManager(this).openDatabase();

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.