Запрос, если база данных Android существует!
Я создал базу данных для своего приложения для android, которая содержит статические данные и не требует обновления/удаления функций, поэтому при запуске приложения я хочу проверить, существует ли БД, а если нет, то выполните мой класс dbAdapter. Я знаю, что это простой оператор if, но мне просто интересно, Самый эффективный способ запроса, существует ли БД.
Ура
6 ответов:
/** * Check if the database exist and can be read. * * @return true if it exists and can be read, false if it doesn't */ private boolean checkDataBase() { SQLiteDatabase checkDB = null; try { checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH, null, SQLiteDatabase.OPEN_READONLY); checkDB.close(); } catch (SQLiteException e) { // database doesn't exist yet. } return checkDB != null; }
где DB_FULL_PATH-это путь к файлу базы данных.
и причина, по которой я не просто проверяю, существует ли файл, заключается в том, что он не скажет, является ли (а) это файл SQLite db, (б) файл не поврежден и фактически может быть прочитан, т. е. из-за частичной загрузки или однако он был создан.
Я бы предпочел проверить существование файла напрямую:
private static boolean doesDatabaseExist(Context context, String dbName) { File dbFile = context.getDatabasePath(dbName); return dbFile.exists(); }
при инициализации ниже класса с:
mOpenHelper = new DatabaseHelper(getContext());
это автоматически создаст базу данных, если она отсутствует. Он также позволяет обновить базу данных, изменив DB_VER на большее число.
тогда вы можете запросить использование базы данных:
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
выше получает вас db.query () & db.вставить () методы etc.
private static class DatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "db_name.db"; private static final int DB_VER = 1; public DatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VER); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE table_name (" + "_id INTEGER PRIMARY KEY, " + " column_name_2 TEXT );"); .execSQL("INSERT INTO table_name " + "(column_name_2) " + "VALUES " + "('hello world');"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG + "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); try { db.execSQL("DROP TABLE IF EXISTS table_name"); onCreate(db); } catch (SQLException e) { Log.e(TAG + "getting exception " + e.getLocalizedMessage().toString()); } } }
все просто: Откройте свою базу данных в блоке try с путем da databse, например:
try{ SQLiteDatabase dbe = SQLiteDatabase.openDatabase("/data/data/bangla.rana.fahim/databases/dictionary", null,0); Log.d("opendb","EXIST"); dbe.close(); }
Если возникает исключение, то база данных не выходит, поэтому создайте его:
catch(SQLiteException e){ Log.d("opendb","NOT EXIST"); SQLiteDatabase db = openOrCreateDatabase("dictionary", MODE_PRIVATE, null); db.execSQL("CREATE TABLE IF NOT EXISTS LIST(wlist varchar);"); db.execSQL("INSERT INTO LIST VALUES('খবর');"); db.execSQL("INSERT INTO LIST VALUES('কবর');"); //whatever you want db.close(); }
вот и все, что вы сделали:)
я попробовал версию, предоставленную Матиасом Конрадтом, но я нашел, что просто проверить, если БД != null недостаточно. Я исправил это:
/** * Check if the database exist and can be read. * * @return true if it exists and can be read, false if it doesn't */ private boolean checkDataBase(String InDBFile) { SQLiteDatabase checkDB = null; boolean res = false; try { checkDB = SQLiteDatabase.openDatabase(InDBFile, null, SQLiteDatabase.OPEN_READONLY); res = (checkDB.getVersion() > 0); checkDB.close(); } catch (SQLiteException e) { // database doesn't exist yet. Log.e("checkDataBase", "Selected file could not be opened as DB."); res = false; } return res; }