获取数据库路径

use*_*151 24 database android

我是android新手,我想用SQLite创建一种CRUD.

我有一个public class DataBaseHelper有构造函数:

public DataBaseHelper(Context context)
{
    this.context = context;
}
Run Code Online (Sandbox Code Playgroud)

和datebase的getter:

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;
}
Run Code Online (Sandbox Code Playgroud)

如果我是第一次启动程序 - 一切似乎都没问题.数据库为null,我创建它(使用表).但是当我重新启动我的app数据库时,它再次为null并且无法创建表.

我决定编写一个checkDB函数,它试图打开一个数据库.但是我在哪里可以找到它的路径?我不希望它被"硬编码".

或者我可能正在做某种反模式?

Eth*_*iou 61

你可以通过 context.getDatabasePath(DataBaseHelper.dbName)

  • @ Archie.bpgc`context.getDatabasePath(DataBaseHelper.dbName).toString;` (4认同)

Abd*_*wan 5

获取Sqlite数据库的路径

这里我写了两种获取路径的方法。

(1)使用自定义方法

public String getDbPath(Context context,String YourDbName)
{
    return context.getDatabasePath(YourDbName).getAbsolutePath();
}
Run Code Online (Sandbox Code Playgroud)

(2)使用File类

  File path=context.getDatabasePath("YourDbName");
  String db_path=path.getAbsolutePath();
  Log.i("Path:",db_path);
Run Code Online (Sandbox Code Playgroud)

即使你会看到这两个代码...那么两个代码是相同的,第一个是获取数据库路径的快捷方法,并且与第二个选项相比,它占用更少的内存。