15

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

Cœur
  • 37,241
  • 25
  • 195
  • 267
Daniel López Lacalle
  • 6,715
  • 3
  • 25
  • 23
  • http://stackoverflow.com/questions/9109438/how-to-use-an-existing-database-with-an-android-application/9109728#9109728 – Yaqub Ahmad Nov 13 '12 at 04:50
  • See here:[programatically get the database path](https://stackoverflow.com/a/55135337/8034839) – shizhen Mar 13 '19 at 06:23

5 Answers5

11

I used...

String destPath = getFilesDir().getPath();
destPath = destPath.substring(0, destPath.lastIndexOf("/")) + "/databases";
IG2013
  • 149
  • 1
  • 5
10

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

Nikolay Elenkov
  • 52,576
  • 10
  • 84
  • 84
9

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.

PearsonArtPhoto
  • 38,970
  • 17
  • 111
  • 142
  • 2
    The database directory might not exist so before you write/copy any content to context.getDatabasePath("a") make sure to check that context.getDatabasePath("a").getParentFile() exists and if not create the directory. – nibarius Nov 28 '15 at 20:54
6

You can use the Method getFilesDir() or getDatabasePath in an Activity-Class to get this Folder.
More info here

Thommy
  • 5,070
  • 2
  • 28
  • 51
1

You can use getDatabasePath method in your Helper class:

public class MyDatabase extends SQLiteAssetHelper {

    private static final String DATABASE_NAME = "wl.db";
    private static final int DATABASE_VERSION = 1;  
    public String databasePath = "";    

    public MyDatabase(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

        // you can use an alternate constructor to specify a database location
        // (such as a folder on the sd card)
        // you must ensure that this folder is available and you have permission
        // to write to it
        // super(context, DATABASE_NAME, context.getExternalFilesDir(null).getAbsolutePath(), null, DATABASE_VERSION);

        databasePath = context.getDatabasePath("wl.db").getPath();
    }
live-love
  • 48,840
  • 22
  • 240
  • 204