Подтвердить что ты не робот

Получить путь к базе данных

Im новый для android, и я хочу создать CRUD с SQLite.

У меня есть public class DataBaseHelper, у которого есть конструктор:

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

и геттер для базы данных:

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, которая пытается открыть базу данных. Но где я могу найти путь для этого? Я не хочу, чтобы он был "жестко запрограммирован".

Или может быть, я делаю какой-то анти-шаблон?

4b9b3361

Ответ 1

Вы можете получить путь context.getDatabasePath(DataBaseHelper.dbName)

Ответ 2

Вы можете использовать метод 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();
    }

Ответ 3

Чтобы получить путь к базе данных Sqlite

здесь я пишу два способа получить путь.

(1) с использованием настраиваемого метода

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

(2) с использованием класса File

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

даже вы увидите оба кода... тогда оба кода одинаковы, Первый - это метод быстрого доступа для получения пути к базе данных, и он занимает меньше памяти, чем второй вариант.

Ответ 4

Мне также нужно было получить доступ к 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);
}

Надеюсь, это поможет!: -)