SqliteOpenHelper
默認在mode_private
中創建數據庫。我們如何使用SqliteOpenHelper創建世界可讀/可寫的數據庫?SqliteOpenHelper for Mode_World_Readable,怎麼樣?
要不然我需要使用Context.openOrCreateDatabase()
SqliteOpenHelper
默認在mode_private
中創建數據庫。我們如何使用SqliteOpenHelper創建世界可讀/可寫的數據庫?SqliteOpenHelper for Mode_World_Readable,怎麼樣?
要不然我需要使用Context.openOrCreateDatabase()
我們如何能夠創造世界可讀/寫DB使用SqliteOpenHelper?
我們不能那樣做。 ContextImpl.openOrCreateDatabase()
實際上使用SQLiteDatabase.openOrCreateDatabase()
方法打開/創建數據庫,然後使用不屬於公共API的類android.os.FileUtils
設置數據庫文件的權限。因此,除非您想使用反射,否則使數據庫具有世界可讀/可寫的唯一可能方式是使用Context.openOrCreateDatabase()
。
如果目標是使用其他應用程序的數據庫,那麼您應該使用Content Provider。 – rogerkk 2011-03-20 07:52:44
將數據庫打開爲世界可讀可寫是絕對有可能的。但是,數據庫的必要性是什麼?你可以使用文件來代替..!
將數據庫打開爲世界不推薦使用可讀/寫。只在必要時
打開一個數據庫, 因爲它是昂貴的:
一定要記住這一點。
只在需要的模式下打開,或者是 讀取或寫入,或者兩者兼有。
如果要共享一個數據庫或應用程序,你可以使用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
姆姆..是否真的有一種方法使它具有世界可讀性?在開發指南中寫道:'SQLite數據庫:將結構化數據存儲在* private *數據庫中。' – Chris 2011-03-10 08:17:36
是的,如果您引用Context.openOrCreateDatabase()它接受世界讀/寫。不過,我找不到使用SQLiteOpenHelper的方法,默認情況下它傳遞0(即mode_private) – ankitjaininfo 2011-03-10 09:47:59