1

私はデータベースを作成していて、次のような行を挿入しています。

/* 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);");

上記のコードに関して2つの質問があります。

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

これを達成する方法について何か提案はありますか?

4

2 に答える 2

6

重複を防ぐには、そのテーブルに UNIQUE INDEX を作成します。

実行時には、少なくとも 2 つのオプションがあります。

  1. 複製を試みた場合にインデックスが例外を発生させ、その例外をキャッチして別のことを行う、または

  2. テーブルを積極的にクエリして、新しいレコードが存在するかどうかを確認します。見つかった場合は、重複があることがわかっているので、別のことを行います。

于 2011-09-08T15:50:13.213 に答える
2

以下にいくつかの提案を示します。

  1. テーブルを作成するときに、重複を防ぎたい列を UNIQUE として定義します。
  2. あなたの checkDataBase() メソッドは少し奇妙です。物事を簡素化するために、実装で SQLiteOpenHelper クラスを使用することを検討しましたか?

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

于 2011-09-08T15:55:13.910 に答える