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

关于上面的代码,我有两个问题:

  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。

在运行时,您至少有两个选择:

  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 回答