0

SqliteOpenHelperデフォルトでは、データベースが に作成されますmode_private。SqliteOpenHelper を使用して、誰でも読み書き可能なデータベースを作成するにはどうすればよいですか?

または、Context.openOrCreateDatabase()を使用する必要がありますか

4

2 に答える 2

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()ます。DB を作成するコンテキストを誰でも読み取り可能として宣言します。この方法は決して安全ではないことに注意してください。

ここを参考にしてください。

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

于 2011-03-22T05:46:09.667 に答える
0

SqliteOpenHelper を使用して、誰でも読み書き可能なデータベースを作成するにはどうすればよいですか?

それはできません。ContextImpl.openOrCreateDatabase()メソッドを使用して実際にデータベースを開く/作成し、パブリック API の一部ではないSQLiteDatabase.openOrCreateDatabase()クラスを使用してデータベース ファイルのアクセス許可を設定します。android.os.FileUtilsしたがって、リフレクションを使用したくない場合を除き、データベースを誰でも読み取り可能/書き込み可能にする唯一の方法は、 を使用することContext.openOrCreateDatabase()です。

于 2011-03-16T01:10:31.330 に答える