SqlLiteDatabase捕获异常

时间:2016-11-02 21:30:01

标签: android sqlite

我在数据库中有我的表

CREATE TABLE Opponent (
    Opponent_ID integer PRIMARY KEY AUTOINCREMENT,
    Opponent_Add_Date text,
    Opponent_Name text UNIQUE
);

然后我正在尝试将查询插入数据库

String query = "INSERT INTO Opponent (Add_Date, Opponent_Name) VALUES ('date' , 'name');"

问题出现了,当我想添加现有的对手名字时,我的应用程序粉碎了。如果我试图用SQLiteConstraintException捕获我的异常,那么它允许添加两个具有相同名称的Opponents。为了抓住它,我正在使用:

try {
     SQLiteStatement statement = mDataBase.compileStatement(query);
     statement.execute();
} catch (SQLiteConstraintException e) {
      Log.e("insert", "SQLException: " + e.getLocalizedMessage());
}

当有两个相同的名字被添加时,有人能告诉我如何抓住这一时刻吗?

1 个答案:

答案 0 :(得分:0)

如果您只想在名称已存在的情况下不执行任何操作,则可以改为使用INSERT OR IGNORE

但是,如果您还需要检索已存在的行的ID,那么您应该首先执行SELECT,并且仅在找不到行时才执行INSERT。