获取数据库路径

时间:2012-03-21 18:14:10

标签: android database

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

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

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

和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;
}

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

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

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

4 个答案:

答案 0 :(得分:60)

您可以按context.getDatabasePath(DataBaseHelper.dbName)

获取路径

答案 1 :(得分:3)

您可以在帮助程序的构造函数中使用getDatabasePath方法:

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

答案 2 :(得分:1)

获取Sqlite数据库的路径

这里我正在写两种方法来获得这条路。

(1)使用自定义方法

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

(2)使用文件类

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

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

答案 3 :(得分:0)

我还需要为应用程序访问dbs。这对我有用:

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

希望它有所帮助! : - )