Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get databases directory for my app programmatically

I want to use a "pre loaded" database in my app. There are tons of questions about this and most point to this blog article here or similars.

So far so good. I just want to know if there is a better way to get the default databases directory so you don't have to use something like this:

private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";

I mean, maybe that is changed in the future or maybe a device or rom could place it elsewhere... so is there a way to get this path programatically?

In Context exists a method to getDatabasePath(name), but you need to give it an existing db name and well... it doesn't exist yet, I want to move it there :P

like image 379
Daniel López Lacalle Avatar asked Oct 04 '12 08:10

Daniel López Lacalle


People also ask

How do I find the Applications folder on Android?

For example, if you want to work with the database directory, use getDatabasePath() . Or, if you want your own directory independent of anything else, use getDir() .

Where is the database stored in Android Studio?

TABLE_NAME; Just like files that you save on the device's internal storage, Android stores your database in your app's private folder.

What databases do Android apps use?

Since Android was created, we app developers have been using SQLite to store our local data. Sometimes directly with SQL statements, sometimes using an Object-Relational Mapper (ORM) as an abstraction layer, but either way, we've been using SQLite at the end of the day.


3 Answers

I used...

String destPath = getFilesDir().getPath();
destPath = destPath.substring(0, destPath.lastIndexOf("/")) + "/databases";
like image 129
IG2013 Avatar answered Oct 16 '22 00:10

IG2013


Create an empty DB, get the path with getDatabasePath(), then overwrite it with your own.

like image 26
Nikolay Elenkov Avatar answered Oct 16 '22 00:10

Nikolay Elenkov


Used by SQLiteAssetHelper:

 String path = mContext.getDatabasePath(mName).getPath();

At this time, the database doesn't exist. I think the String just takes the internal path and adds the appropriate modifiers. In fact, this seems to work just fine:

context.getDatabasePath("a").getParentFile()

Basically, you don't need to have a real database created, just ask it for one.

like image 22
PearsonArtPhoto Avatar answered Oct 15 '22 23:10

PearsonArtPhoto