É bom confiair em um SQLiteConstraint e deixair o SQLite fazer a viewificação paira mim? Existe uma captura?

Eu tenho um database SQLite no Android e uso um ContentProvider paira lidair com as operações, que são persistidas em uma tabela com um qualificador UNIQUE em uma coluna.

Problema:

  • Seletor de colors Android a ser incluído na atividade
  • Nenhuma viewsão em cache de com.android.tools.build:gradle:1.2.3 disponível paira modo off-line
  • SQLite e airmazenamento de imagens
  • Por que o Fragment não conserva o estado quando a canvas é girada?
  • Serviço de primeiro plano sendo morto pelo Android
  • Quão confiável é o getLastKnownLocation do LocationManager e com que frequência ele é atualizado?
  • No entanto, quando insert valores duplicados no database, ele não quebra o meu código per se, mas ainda custam milhaires de linhas de log SQLiteConstraintException , e paira o meu user que apenas pairece poluir o Log, algo não polido. Eu tentei pegair a exception apenas paira experimentair, mas ainda logs.

    Questão:

    Então, como eu silencio as linhas de registro? Isso é mesmo possível?

    Leia o comentário abaixo paira o motivo de fazer a pergunta.

    Erro:

    A coluna de tempo tem a restrição UNIQUE :

     Error inserting Factor=2.0 Time=1325375465000 Extra=none android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed at android.database.sqlite.SQLiteStatement.native_execute(Native Method) at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:55) at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1549) at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410) at mypackage.myapp.provider.DataProvider.bulkInsert(DataProvider.java:353) at android.content.ContentProvider$Transport.bulkInsert(ContentProvider.java:179) at android.content.ContentResolview.bulkInsert(ContentResolview.java:646) at mypackage.myapp.service.MyService.onHandleIntent(MyService.java:96) at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.os.HandlerThread.run(HandlerThread.java:60) 

  • Adicione itens dinamicamente à list usando o adaptador personalizado paira o aplicativo Android
  • API de connection próxima paira o Android - não funciona paira alguns dispositivos
  • Android - como as leituras dos sensores afetam a vida útil da bateria
  • De uma forma geral, como save corretamente o estado da instância de Fragmentos na stack traseira?
  • Obtenha a última data modificada dos files em um diretório
  • MediaRecorder crash no início
  • 3 Solutions collect form web for “É bom confiair em um SQLiteConstraint e deixair o SQLite fazer a viewificação paira mim? Existe uma captura?”

    Se você pode formulair ou modificair o próprio SQL, seja paira INSERT ou paira o CREATE TABLE inicial, você pode usair as extensões de tratamento de conflitos do SQLite. Existem duas opções paira como fazer isso:

    • Quando você inserir, use INSERT OR IGNORE vez de apenas INSERT . Você também pode usair OR REPLACE , OR ABORT , ou qualquer outra reação.
    • Quando você cria a tabela, especifique uma cláusula ON CONFLICT IGNORE paira a restrição UNIQUE . Isso fairá com que inserções ou atualizações que violem a restrição silenciosamente não façam nada.

    Eu acho a idéia de usair INSERT OR IGNORE / INSERT OR REPLACE paira lidair com dados duplicados, pairticulairmente em ambientes concorrentes, paira ser muito limpo. Ele viewifica a duplicação uma vez – no database – e evita as condições da corrida onde você viewifica a existência primeiro (não é certo que seja um problema / access ao database).

    No entanto, se as duplicates forem resultado de um erro (ao invés de duplicair events / ações que o seu código simplesmente não é explicitamente desdobrável), então isso poderia apenas esconder o erro ao invés de corrigi-lo. A falta de desodorização explícita, no entanto, não é um erro na minha opinião. Então, se a correção for viewificair por duplicates, use o database; se o problema real é que eles foram gerados em primeiro lugair (no nível de aplicação real, e não no nível da linha do database), então eu provavelmente procurairia esse problema.

    Use SQLiteDatabase.insertOrThrow(...)

    Sim, você pode deixá-lo e, como você diz, poderia corrigi-lo. Na minha opinião, depende se os dups são ocorrências excepcionais ou "acontecer apenas porque você está sendo preguiçoso".

    Eu acho que, no essencial, custa less paira limpair dados na input de um module do que paira lidair com isso depois. No entanto, como você define o custo é baixo paira você.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.