Делает Базу данных, Существуют [как назвать класс]

Я нашел это превосходный пример класса SQLiteOpenHelper, который действительно приятно зарегистрирован, и я думаю, что могу использовать его для своего заявления; вещь, я все еще изо всех сил пытаюсь определить, существует ли база данных, созданная моим приложением уже,

My app has a main activity Java class [imaginatively named] 'ActivityMain' which at the moment calls the void dbTest();

public void DBTest() {

        SQLiteDatabase myDB = null;

        /* Create a Database. */
        try {
            myDB = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);

            /* Create a Table in the Database. */
            myDB.execSQL("CREATE TABLE IF NOT EXISTS "
                    + DATABASE_TABLE
                    + " (" + KEY_ID + " integer primary key autoincrement, "
                    + KEY_SCRIPT_NAME + " text, " + KEY_SCRIPT_BODY + " text, "
                    + KEY_SU_NEEDED + " short);");

            /* Insert data to a Table*/
            myDB.execSQL("INSERT INTO "
                    + DATABASE_TABLE
                    + " (" + KEY_SCRIPT_NAME
                    + ", " + KEY_SCRIPT_BODY
                    + ", " + KEY_SU_NEEDED + ")"
                    + " VALUES ('CPU information', 'cat /proc/cpuinfo', 1);");

            /*retrieve data from database */
            Cursor c = myDB.rawQuery("SELECT * FROM " + DATABASE_TABLE, null);

            int scriptName = c.getColumnIndex("name");

           //Check if our result was valid.
            c.moveToFirst();
           //cursor left as it came from the database because it starts at the row before the first row
            ArrayList sData = new ArrayList();
            if (c != null) {
                do {
                    String Name = c.getString(scriptName);
                    sData.add(Name);
                } while (c.moveToNext());
            }

            ListView lv = (ListView) findViewById(R.id.mainListView);
            lv.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, sData));
            lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

        } catch (Exception e) {
            Log.e("Error", "Error", e);
        } finally {
            if (myDB != null)
                myDB.close();
        }

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

Я хочу db, начинаются с некоторыми начальными значениями на там вот почему, я вставляю данные, пользователь может тогда удалить его, если им нравится

Таким образом в мой' ActivityMain ' класс я хочу звонить createDataBase (); метод от' DatabaseHelper ' класс я использовал от связанного образца, но не может

Он что-то как:

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_main);

                try {
            createDataBase();
            catch(SQLiteException e){
               //database doesn't exist yet.
                return false;
            }

У меня есть булева функция в' ActivityMain ' класс, который хорошо работает, но я не уверен, что это - правильный способ сделать это и на самом деле должно делать все это через класс помощника

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 false;
    }
    return checkDB != null ? true : false;
}

Кто-то мог дать мне некоторые подсказки, пожалуйста?

Большое спасибо:)

2
nl ja de
"Я использовал от связанного образца, но can' t" - Почему can' t вы?
добавлено автор Code-Apprentice, источник

3 ответы

Обучающие программы хороши, но ничто как официальная документация API. Всегда читайте официальную документацию. Обучающие программы, ради простоты, всегда опускают материал (иногда важный материал).

Как вы видите, getReadableDatabse() и/или getWritableDatabase() будет автоматически звонить onCreate() , если DB не существует.

Вот и пример о том, как я делаю это (не проверенный, но должен показать вам, как сделать это):

public class YourDBManager extends SQLiteOpenHelper {

    private SQLiteDatabase db = null;

    public YourDBManager(final Context context, final String dbName, final int dbVersion) {
        super(context, dbName, null, dbVersion);
        db = getWritableDatabase();
    }

    /** Initializes your DB */
    private void initializeDB(final SQLiteDatabase db) throws SQLException {
       //Do whatever you want to do to initialize your DB here
    }

    /** 
     * This method is NOT called directly by you but called by SQLiteOpenHelper, 
     * but by getReadableDatabase()/getWritableDatabase() in case it doesn't exist.
     * Here you do whatever you want to do to initialize the DB the first time it is created.
     */
    @Override
    public void onCreate(final SQLiteDatabase db) throws SQLException {
        Log.i(TAG, "=====DATABASE DOES NOT EXIST: CREATING IT======");
        initializeDB(db);
    }
}

public class YourActivity extends Activity {

    private YourDBManager dbMan = null;

    /** Do NOT call from UIThread! */
    private void initializeDBManager() {
        dbMan = new YourDBManager(this, "mydatabase", 1);
    }
}

Надежда это помогает.

1
добавлено
Пожалуйста, прочитайте документацию, с которой я связался. createDatabase() называет getReadableDatabse() и/или getWritableDatabase() , не вами . Необходимо осуществить createDatabase() .
добавлено автор m0skit0, источник
Извините, я смешался createDatabase() с onCreate() . Я обновил свой ответ с большим количеством деталей и примером.
добавлено автор m0skit0, источник
Как делают я называю ' createDataBase ' от моего ' MainActivity ' класс?
добавлено автор spences10, источник
Я прочитал документацию, нет никакой детализации части, как назвать методы. Я can' t просто всовывают имя класса с методом. I' m действительно разбиваемый отсутствием примеров или чего-то последовательного
добавлено автор spences10, источник

Можно узнать, существует ли файл базы данных или не при помощи

File dbFile = context.getDatabasePath(DATABASE_NAME);
if(dbFile.exists()){
// do something
}

Это не скажет вам, если база данных будет действительна или что-нибудь все же.

1
добавлено

Я думаю, что вы уже делаете вещи правильный путь. Есть несколько других вопросов по теме (такой как Вопрос, если база данных Android существует! и Android - База данных SQLite существует?) которые рекомендуют открыть базу данных, и затем поймать исключение, чтобы показать, что DB не существует.

1
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)