Запрос, если база данных Android существует! - PullRequest
63 голосов
/ 02 августа 2010

Я создал базу данных для своего приложения для Android, которая содержит статические данные и не требует функции обновления / удаления, поэтому при запуске приложения я хочу проверить, существует ли база данных, а если нет, то выполнить класс dbAdapter.Я знаю, что это простое утверждение if, но мне просто интересно, как эффективнее узнать, существует ли БД.

Приветствия

Ответы [ 6 ]

161 голосов
/ 19 августа 2012

Я бы предпочел проверить наличие файла напрямую:

private static boolean doesDatabaseExist(Context context, String dbName) {
    File dbFile = context.getDatabasePath(dbName);
    return dbFile.exists();
}
78 голосов
/ 02 августа 2010
/**
 * 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 - путь к файлу вашей базы данных.

И причина, по которой я не просто проверяю, существует ли файл, заключается в том, что он не скажет, является ли (a) файл БД sqlite,(b) файл не поврежден и фактически может быть прочитан, то есть из-за частичной загрузки или, тем не менее, он был создан.

4 голосов
/ 02 августа 2010

Когда вы инициализируете следующий класс с помощью:

mOpenHelper = new DatabaseHelper(getContext());

Это автоматически создаст базу данных, если ее нет.Это также позволяет вам обновить базу данных, изменив DB_VER на большее число.

Затем вы можете запросить базу данных, используя:

 SQLiteDatabase db = mOpenHelper.getWritableDatabase();

выше вы получите дБ.query () & db.insert () и т. д.

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

}
2 голосов
/ 27 января 2012

все просто: Откройте вашу базу данных в блоке 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();
}

Вот и все, что вы сделали:)

1 голос
/ 02 декабря 2017

Я попробовал версию, предоставленную Матиасом Конрадтом, но обнаружил, что просто проверить, является ли DB! = 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;
        }
0 голосов
/ 18 августа 2014

Создайте глобальный объект класса помощника базы данных в вашей основной деятельности. В функции onCreate () MainActivity попробуйте следующее:

//global database helper variable

DatabaseHelper dbh;

//in the onCreate()

if(dbh.getReadableDatabase()!=null)
//view the list

else
//create db
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...