2014-07-05 61 views
0

我的android應用程序需要使用已存在的SQLiteDatabase文件(xxx.db),在eclipse項目中,我應該在哪個項目文件夾中放入這個數據庫文件?以及如何在我的代碼中獲取數據庫?如何在android應用程序中獲取自己的SQLiteDatabase文件?

+0

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/,http://mobisys.in/blog/tag/shipping-of -external-database-to-application/ –

回答

1

只需將您的xxx.db文件放入您的資產文件夾即可。

public class DatabaseHelper extends SQLiteOpenHelper { 

    private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window 
    // destination path (location) of our database on device 
    private static String DB_PATH = ""; 
    private static String DB_NAME = "xxx.db";// Database name 
    private SQLiteDatabase mDataBase; 
    private final Context mContext; 

    public DatabaseHelper(Context context) { 
     super(context, DB_NAME, null, 1);// 1? its Database Version 
     if (android.os.Build.VERSION.SDK_INT >= 4.2) { 
      DB_PATH = context.getApplicationInfo().dataDir + "/databases/"; 
     } else { 
      DB_PATH = context.getFilesDir().getPath() + context.getPackageName() + "/databases/"; 
     } 
     this.mContext = context; 
    } 

    public void createDataBase() throws IOException { 
     // If database not exists copy it from the assets 
     boolean mDataBaseExist = checkDataBase(); 
     if (!mDataBaseExist) { 
      this.getReadableDatabase(); 
      this.close(); 
      try { 
       // Copy the database from assests 
       copyDataBase(); 
       Log.e(TAG, "createDatabase database created"); 
      } catch (IOException mIOException) { 
       throw new Error("ErrorCopyingDataBase"); 
      } 
     } 
    } 

    // Check that the database exists here: /data/data/your package/databases/Da 
    // Name 
    private boolean checkDataBase() { 
     File dbFile = new File(DB_PATH + DB_NAME); 
     return dbFile.exists(); 
    } 

    // Copy the database from assets 
    private void copyDataBase() throws IOException { 
     InputStream mInput = mContext.getAssets().open(DB_NAME); 
     String outFileName = DB_PATH + DB_NAME; 
     OutputStream mOutput = new FileOutputStream(outFileName); 
     byte[] mBuffer = new byte[1024]; 
     int mLength; 
     while ((mLength = mInput.read(mBuffer)) > 0) { 
      mOutput.write(mBuffer, 0, mLength); 
     } 
     mOutput.flush(); 
     mOutput.close(); 
     mInput.close(); 
    } 

    // Open the database, so we can query it 
    public boolean openDataBase() throws SQLException { 
     String mPath = DB_PATH + DB_NAME; 
     mDataBase = SQLiteDatabase.openDatabase(mPath, null, 
       SQLiteDatabase.CREATE_IF_NECESSARY); 
     return mDataBase != null; 
    } 

    @Override 
    public synchronized void close() { 
     if (mDataBase != null) 
      mDataBase.close(); 
     super.close(); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 

    } 
} 
+0

...它不起作用!首先,您必須**將數據庫**從您的資產路徑複製到您的數據庫路徑。 –

+0

@ FrankN.Stein我發佈了我的代碼,但由於問題被標記爲重複,我刪除了我的代碼。我會再次發佈。 – CodeWarrior

+0

現在,這是一個很好的答案,+1。 –

相關問題