0

Androidでsqliteファイルを使用する方法がわからない状況で立ち往生しています

  1. どこに置く?と
  2. どのように統合できますか?

フォルダーからフェッチできることはわかっていdata/data/PACKAGE/databases/ますが、新しいプロジェクトがある場合、データベースフォルダーが見つかりません。拡張子を持つファイルを配置する場所.sqlite。どんな答えでも大歓迎です。ありがとうございました。

4

4 に答える 4

0

新しいプロジェクトがあるとき、データベース フォルダが見つかりません

理由はセキュリティです。データベースを内部ストレージに配置して、データベースを作成したアプリケーションからのみデータベースが見えるようにすると、より正確になります。.db ファイルは次の場所に保存されます

data/data/com.example.db/databases

したがって、別のプロジェクト(別のパッケージを持つ)で開きたい場合、ファイルはありません。

ファイルをどこに置くか

複数のアプリケーション間で 1 つのデータベースを実現して共有したい場合は、ファイルを外部ストレージに保存できますが、機密データのセキュリティに関する問題がここにあります。

しかし、別のオプションもあります。複数のアプリケーションで 1 つのデータベースを共有できますが、そのため、manifest.xml でアプリケーションごとにsharedUserIdを指定する必要があります。

android:sharedUserId="com.example"

そして、別のアプリケーションから db に接続する場合は、ホスティング アプリケーションのパッケージを使用する必要があります。

Context cntxt = this.createPackageContext("hosting.app.package.name", 
                Context.CONTEXT_INCLUDE_CODE);
于 2013-04-01T13:07:54.950 に答える
0

Eclipse を使用している場合は、.jar ファイルをコピーして貼り付けるだけでこのプラグインをダウンロードできます :) このリンク をたどると、DDMS でデータベースを確認できます

通常、Sqlite データは次の場所に格納されます。

 //data/data/<Your-Application-Package-Name>/databases/<your-database-name>

しかし、あなたがそれらを見ることができない場合。次のように、データベースを SD カードに直接保存できます。

 static class  SQLiteHelper extends SQLiteOpenHelper {

 SQLiteHelper(final Context context) {
    super(context, Environment.getExternalStorageDirectory()
            + File.separator + "/DataBase/" + File.separator
            + DATABASE_NAME, null, DATABASE_VERSION);
}

/sdcard の DataBase フォルダに作成されたデータベースが表示されます。データベースを内部メモリに保存すると、データベースを内部メモリから SD カードにコピーすることもできます :)

于 2013-04-01T13:00:12.927 に答える
0

sqlite ファイルをプロジェクトの assets フォルダーに配置する必要があり、このファイルを SD カードの目的の場所にコピーする必要があります。これがお役に立てば幸いです。

public DataBaseHelper(Context context) 
    {
        super(context, DB_NAME, null, 300500);// 1? its Database Version
        DB_PATH = "/data/data/" + 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.w(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);
            //Log.v("dbFile", dbFile + "   "+ dbFile.exists());
            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;
            //Log.v("mPath", mPath);
            myDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
            //mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
            return myDataBase != null;
        }

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



        // Add your public helper methods to access and get content from the database.
       // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy
       // to you to create adapters for your views.
于 2013-04-01T13:39:43.267 に答える