2011-03-10 20 views
0

SqliteOpenHelper默認在mode_private中創建數據庫。我們如何使用SqliteOpenHelper創建世界可讀/可寫的數據庫?SqliteOpenHelper for Mode_World_Readable,怎麼樣?

要不然我需要使用Context.openOrCreateDatabase()

+0

姆姆..是否真的有一種方法使它具有世界可讀性?在開發指南中寫道:'SQLite數據庫:將結構化數據存儲在* private *數據庫中。' – Chris 2011-03-10 08:17:36

+0

是的,如果您引用Context.openOrCreateDatabase()它接受世界讀/寫。不過,我找不到使用SQLiteOpenHelper的方法,默認情況下它傳遞0(即mode_private) – ankitjaininfo 2011-03-10 09:47:59

回答

0

我們如何能夠創造世界可讀/寫DB使用SqliteOpenHelper?

我們不能那樣做。 ContextImpl.openOrCreateDatabase()實際上使用SQLiteDatabase.openOrCreateDatabase()方法打開/創建數據庫,然後使用不屬於公共API的類android.os.FileUtils設置數據庫文件的權限。因此,除非您想使用反射,否則使數據庫具有世界可讀/可寫的唯一可能方式是使用Context.openOrCreateDatabase()

+0

如果目標是使用其他應用程序的數據庫,那麼您應該使用Content Provider。 – rogerkk 2011-03-20 07:52:44

0

將數據庫打開爲世界可讀可寫是絕對有可能的。但是,數據庫的必要性是什麼?你可以使用文件來代替..!

將數據庫打開爲世界不推薦使用可讀/寫。只在必要時

  • 打開一個數據庫, 因爲它是昂貴的:

    一定要記住這一點。

  • 只在需要的模式下打開,或者是 讀取或寫入,或者兩者兼有。

  • 操作 結束後立即關閉它。

如果要共享一個數據庫或應用程序,你可以使用SharedUserID之間的資源。爲了使用SharedUserID,應用程序必須由相同的密鑰簽名。

欲瞭解更多信息在這裏看到我的帖子在sree.cc

http://sree.cc/google/android/sharing-resources-in-different-aplications-using-shareduserid

下面是相同的代碼片段:

private void getDB() { 
     //accessing file using SHAREDUSERID 
     try 
     { 
      //creating context from mainAPP for accessing database 
      ctx = createPackageContext(
      "com.schogini.sharedDB.pack", 
      Context.CONTEXT_IGNORE_SECURITY); 
      if(ctx==null){ 
       return; 
      } 
     } 
     catch (PackageManager.NameNotFoundException e) { 
      //package not found 
      Log.e("Error",e.getMessage()); 
     } 
     try 
     { 
      File myDbFile = ctx.getDatabasePath("sharedDB.db"); 
      if (myDbFile.exists()) 
      { 
       dbb = openOrCreateDatabase(myDbFile.getPath(), SQLiteDatabase.OPEN_READWRITE, null); 
       dbb.setVersion(1); 
       dbb.setLocale(Locale.getDefault()); 
       dbb.setLockingEnabled(true); 
       try{ 
        cur=dbb.rawQuery("select * from TABLENAME;",null); 
        try{ 
         cur.moveToFirst(); 
         int k=cur.getColumnCount(); 
         lv_arr=new String[k]; 
         for(int i=0;i<k;i++) 
         { 
          lv_arr[i]=""+cur.getString(i); 
          Toast.makeText(LaunchActivity.this, "Data "+i, Toast.LENGTH_SHORT).show(); 
         } 
        } 
        catch(Exception e) 
        { 
         //may be an empty database 
         Log.e("Error",e.getMessage()); 
         dbb.close(); 
        } 
       } 
       catch(Exception e) 
       { 
        Log.e("Error",e.getMessage()); 
        dbb.close(); 
       } 
      } 
      else 
      { 
       //database not found 
       Toast.makeText(LaunchActivity.this, "DataBase Doesnot Exist", Toast.LENGTH_SHORT).show(); 
      } 
     } 
     catch(Exception e) 
     { 
      Log.i("\n\nTAG",e.toString()); 
     } 
} 

不推薦:

如果你希望這個詞可讀,然後創建它可讀的世界。使用openFileOutput()openOrCreateDatabase()。聲明創建數據庫爲世界可讀的上下文。注意這種方法是不安全的。

在這裏做一個參考。

http://developer.android.com/reference/android/content/Context.html#MODE_WORLD_READABLE