web-dev-qa-db-fra.com

Obtenir le chemin de la base de données

Je suis nouveau sur Android et je veux créer un type de CRUD avec SQLite.

J'ai un public class DataBaseHelper qui a un constructeur:

public DataBaseHelper(Context context)
{
    this.context = context;
}

et un getter pour la base de données:

public SQLiteDatabase getDataBase() {
    if (dataBase == null) {
        try {
            dataBase = context.openOrCreateDatabase(DataBaseHelper.dbName,
                                                    Context.MODE_PRIVATE, null);

            dataBase.execSQL("CREATE TABLE " + DataBaseHelper.accountTblName + " " +
                                        "(ID integer PRIMARY KEY AUTOINCREMENT" +
                                        ",name TEXT" +
                                        ",address TEXT" +
                                        ",password TEXT)");
            }
            catch(Exception e) {
                Log.e(context.toString(), e.getMessage());

                if (dataBase != null) {
                    dataBase.close();
                }
            }
    }       
    return dataBase;
}

Si je lance un programme pour la première fois, tout semble aller pour le mieux. la base de données est nulle et je la crée (avec une table). Mais lorsque je redémarre, ma base de données d'applications est à nouveau nulle et la table ne peut pas être créée.

J'ai décidé d'écrire une fonction checkDB, qui tente d'ouvrir une base de données. Mais où puis-je trouver un chemin pour cela? Je ne veux pas qu'il soit "codé en dur".

Ou peut-être que je fais une sorte d'anti-pattern?

22
user1284151

Vous pouvez obtenir le chemin par context.getDatabasePath(DataBaseHelper.dbName)

59
Ethan Liou

Vous pouvez utiliser la méthode getDatabasePath dans le constructeur de votre assistant: 

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);

        databasePath = context.getDatabasePath("wl.db").getPath();
    }
3
live-love

Pour obtenir le chemin de la base de données SQLite

je suis en train d’écrire de deux manières différentes pour obtenir le chemin.

(1) using custom method

public String getDbPath(Context context,String YourDbName)
{
    return context.getDatabasePath(YourDbName).getAbsolutePath();
}

(2) using File class

  File path=context.getDatabasePath("YourDbName");
  String db_path=path.getAbsolutePath();
  Log.i("Path:",db_path);

même si vous verrez les deux codes ... alors les deux codes sont identiques, La première méthode est la méthode de raccourci pour obtenir le chemin de la base de données, et occupe la moins de mémoire par rapport à la deuxième option.

1
Abdul Rizwan

J'avais besoin d'accéder à dbs pour l'application aussi. Cela a fonctionné pour moi: 

String dbFile;
String[] dbNames = getSherlockActivity().databaseList(); // or ContextWrapper
for (int i = 0; i < dbNames.length; i++) {
    dbFile = getSherlockActivity().getDatabasePath(dbNames[i]).toString();
    Log.i(LOG_TAG, dbFile);
}

J'espère que ça aide! :-)

0
MSquare