Androidでsqliteファイルを使用する方法がわからない状況で立ち往生しています
- どこに置く?と
- どのように統合できますか?
フォルダーからフェッチできることはわかっていdata/data/PACKAGE/databases/
ますが、新しいプロジェクトがある場合、データベースフォルダーが見つかりません。拡張子を持つファイルを配置する場所.sqlite
。どんな答えでも大歓迎です。ありがとうございました。
新しいプロジェクトがあるとき、データベース フォルダが見つかりません
理由はセキュリティです。データベースを内部ストレージに配置して、データベースを作成したアプリケーションからのみデータベースが見えるようにすると、より正確になります。.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);
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 カードにコピーすることもできます :)
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.