Запретить дублирующиеся записи и проверить, доступна ли база данных - PullRequest
1 голос
/ 08 сентября 2011

Я создаю базу данных и вставляю строку примерно так:

/* Add two DataSets to the Table. */
myDB.execSQL("INSERT INTO "
              + MY_DATABASE_TABLE
              + " (LastName, FirstName, Country, Age)"
              + " VALUES ('Gramlich', 'Nicolas', 'Germany', 20);");
 myDB.execSQL("INSERT INTO "
              + MY_DATABASE_TABLE
              + " (LastName, FirstName, Country, Age)"
              + " VALUES ('Doe', 'John', 'US', 34);");

У меня есть два вопроса относительно кода выше:

  1. Как мне запретить повторяющиеся записи? Я хочу проверить входящие данные во время вставки.Как я могу этого достичь?Должен ли я использовать IF NOT EXISTS?

  2. Как я могу проверить, доступна ли эта база данных или нет? Пока безуспешно я пытался:

    private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/myDBName";
    private static String DB_NAME = "myDBName";
    
    private boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        try {
            checkDB = SQLiteDatabase.openDatabase(DB_PATH, null,
            SQLiteDatabase.OPEN_READONLY);
            checkDB.close();
        } catch (SQLiteException e) {
            // database doesn't exist yet.
        }
        return checkDB != null ? true : false;
    }
    

Есть предложения, как этого добиться?

Ответы [ 2 ]

6 голосов
/ 08 сентября 2011

для предотвращения дублирования создайте УНИКАЛЬНЫЙ ИНДЕКС для этой таблицы.

Во время выполнения у вас есть как минимум две опции:

  1. , чтобы индекс давал вам исключение, есливы пытаетесь создать дубликат, затем перехватываете это исключение и делаете что-то еще, или

  2. Предварительно выполните запрос к таблице, чтобы узнать, существует ли новая запись, и если вы найдете ее, вы знаете, что она есть.дубликат, так что делай что-нибудь еще.

2 голосов
/ 08 сентября 2011

Вот несколько предложений:

  1. При создании таблиц укажите столбцы, которые вы хотите предотвратить дублирование, как УНИКАЛЬНЫЕ.
  2. Ваш метод checkDataBase () немного странный. Рассматривали ли вы использование класса SQLiteOpenHelper в своей реализации для упрощения вещей?

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

...