歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android 拷貝數據庫文件

做Android開發時,有時並不一定要創建數據庫然後插入數據的過程。譬如,需要提供一個大數據量資源的搜索功能。像號碼歸屬地,城市列表,ip歸屬地等。此時如果鍵數據庫,再將數據一條一條insert到數據庫中,不僅耗時,占用資源,有時還會導入錯誤。最好的方法是將數據庫建好,數據insert好,並將該beifen.db文件放在raw(如果沒有,在res目錄下建一個)目錄下。在創建數據庫時,直接將該文件拷貝到databases目錄下:

DATABASES_DIR="/data/data/yourpackagedir/databases", DATABASE_NAME="beifen.db"。詳細見代碼:

  1.       
  2.     public static synchronized CityDBHelper getInstance(Context context) {  
  3.         copyDatabaseFile(context, true);  
  4.         if(mDatabase == null){  
  5.             mDatabase =  new CityDBHelper(context);  
  6.         }  
  7.         return mDatabase;  
  8.     }  
  9.   
  10.     public static void copyDatabaseFile(Context context, boolean isfored) {  
  11.           
  12.             Log.v(TAG, "--------------------------------copyDatabaseFile-");  
  13.               
  14.             File dir = new File(DATABASES_DIR);  
  15.             if (!dir.exists() || isfored) {  
  16.                 try {  
  17.                     dir.mkdir();  
  18.                 } catch (Exception e) {  
  19.                     e.printStackTrace();  
  20.                 }  
  21.             }  
  22.               
  23.             File dest = new File(dir, DATABASE_NAME);  
  24.             if(dest.exists() && !isfored){  
  25.                 return ;  
  26.             }  
  27.               
  28.             try {  
  29.                 if(dest.exists()){  
  30.                     dest.delete();  
  31.                 }  
  32.                 dest.createNewFile();     
  33.                 InputStream in = context.getResources().openRawResource(R.raw.beifen);  
  34.                 int size = in.available();  
  35.                 byte buf[] = new byte[size];  
  36.                 in.read(buf);  
  37.                 in.close();  
  38.                 FileOutputStream out = new FileOutputStream(dest);  
  39.                 out.write(buf);  
  40.                 out.close();  
  41.             } catch (Exception e) {  
  42.                 e.printStackTrace();  
  43.             }  
  44.         }  

如果這樣還不放心,可以在運行ContentProvider的query(一般拷貝數據庫都是用於查詢的)時,做一次拷貝檢測

  1. copyDatabaseFile(context, false)  

如果該文件沒有,則拷貝,如果有,不拷貝

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved