Ответ 1
Вы можете получить путь context.getDatabasePath(DataBaseHelper.dbName)
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, которая пытается открыть базу данных. Но где я могу найти путь для этого? Я не хочу, чтобы он был "жестко запрограммирован".
Или может быть, я делаю какой-то анти-шаблон?
Вы можете получить путь context.getDatabasePath(DataBaseHelper.dbName)
Вы можете использовать метод 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();
}
здесь я пишу два способа получить путь.
(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);
даже вы увидите оба кода... тогда оба кода одинаковы, Первый - это метод быстрого доступа для получения пути к базе данных, и он занимает меньше памяти, чем второй вариант.
Мне также нужно было получить доступ к 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);
}
Надеюсь, это поможет!: -)