Как перехватить имя столбца в SQLiteConstraintException Не удалось создать уникальное ограничение - PullRequest
0 голосов
/ 13 октября 2018

Я тестирую свое приложение и пытался вставить дубликат записи в SQLite.И Java вернула исключение с точно таким же столбцом.Могу ли я получить информацию об ошибке, чтобы отобразить пользователю сообщение с информацией, которую он напечатал дубликатом?

Мой код:

        ContentValues valores;
    valores = new ContentValues();
    valores.put("nome", nome);
    valores.put("apelido", apelido);

    try {
        resultado = db.insert("escolas", null, valores);
    }catch (SQLiteConstraintException e){
        Log.e("dop",e.getLocalizedMessage()+"");
        Log.e("dop",e.getMessage()+"");
        Log.e("dop",e.getCause()+"");
        Log.e("dop",e.getStackTrace()+"");
        Log.e("dop",e.getSuppressed()+"");
    }

Исключение в logcat

10-12 18:59:49.747 24576-24576/br.com.brhuearts.escola1 E/SQLiteDatabase: Error inserting nome=A apelido=B
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: escolas.nome (code 2067)
    at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
    at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
    at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
    at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1474)
    at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343)
    at br.com.brhuearts.escola1.presenter.PresenterEscola.insertEscola(PresenterEscola.java:51)

1 Ответ

0 голосов
/ 13 октября 2018

Исключение будет перехвачено ( не перехватывается методом вставки, поэтому код не перехватывает его ), если вы используете альтернативный вспомогательный метод insertOrThrow .

согласно: -

    resultado = db.insertOrThrow("escolas", null, valores);

Альтернативно, вы можете просто проверить, что long , возвращаемый вставкой , равен 1или больше (должно быть -1, чтобы указать, что строка не вставлена, никогда не должно быть 0).Однако дубликат не обязательно является единственной причиной того, что строка не вставлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...