SqliteOpenHelper
デフォルトでは、データベースが に作成されますmode_private
。SqliteOpenHelper を使用して、誰でも読み書き可能なデータベースを作成するにはどうすればよいですか?
2 に答える
誰でも読み取り可能/書き込み可能としてデータベースを開くことは間違いなく可能です。それでは、データベースの必要性は何でしょうか? 代わりにファイルを使用できます..!!
誰でも読み取り可能/書き込み可能としてデータベースを開くことはお勧めしません。
常にこれを覚えておいてください:
コストがかかるため、必要な場合にのみデータベースを開きます。
必要なモードでのみ、読み取りまたは書き込み、またはその両方で開きます。
- 操作が終了したらすぐに閉じます。
アプリケーション間でデータベースまたはリソースを共有する場合は、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()
ます。DB を作成するコンテキストを誰でも読み取り可能として宣言します。この方法は決して安全ではないことに注意してください。
ここを参考にしてください。
http://developer.android.com/reference/android/content/Context.html#MODE_WORLD_READABLE
SqliteOpenHelper を使用して、誰でも読み書き可能なデータベースを作成するにはどうすればよいですか?
それはできません。ContextImpl.openOrCreateDatabase()
メソッドを使用して実際にデータベースを開く/作成し、パブリック API の一部ではないSQLiteDatabase.openOrCreateDatabase()
クラスを使用してデータベース ファイルのアクセス許可を設定します。android.os.FileUtils
したがって、リフレクションを使用したくない場合を除き、データベースを誰でも読み取り可能/書き込み可能にする唯一の方法は、 を使用することContext.openOrCreateDatabase()
です。