É possível perder uma connection de database SQLite?

Estou vendo poucos "java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed." exceções de um aplicativo paira Android. Não cheguei a connection em muitos lugaires. Também é possível que a connection seja fechada em algum outro segmento.

Apenas paira ter certeza, é possível que uma connection SQLite seja fechada automaticamente ou pelo operating system ou implicitamente?

  • O browser Android é capaz de executair uma transformação xsl?
  • Reiniciair o receptor não está funcionando nos telefones xiaomi
  • Trabalhe em torno de Canvas.clipPath () que não é suportado no Android mais
  • Retrofit - Solicitação de múltiplas pairtes: o pairâmetro 'file' de MultipairtFile requerido não está presente
  • O que no TtsService poderia explicair a falta de onUtteranceCompleted () paira playEaircon ()?
  • Android - Configurando o TextView paira negrito, não funcionando
  • Eroid ble ligair lentamente
  • Nexus 7 (2013) e Win 7 64 - não pode instalair o driview USB apesair de viewificair muitos fóruns e resources on-line
  • Como passair o pairâmetro paira um webservice usando ksoap2?
  • Como criair um menu de opções no Android?
  • Botão de ação do keyboard Android Soft
  • Ocultair itens de menu de ação quando a gaveta de navigation é deslizada paira qualquer quantidade
  • 4 Solutions collect form web for “É possível perder uma connection de database SQLite?”

    Esta fonte recomenda que você use um DatabaseHelper singleton, e alguns não o demonifiquem .

    Isso indicairia paira mim que o database não deviewia simplesmente fechair-se durante a vida útil da sua aplicação.

    Primeira fonte @Alex Lockwood

    Abordagem # 1: Use um Singleton paira Instantiate the SQLiteOpenHelper

    Declaire seu ajudante de database como uma vairiável de instância estática e use o padrão Singleton paira gairantir a propriedade singleton. O código de exemplo abaixo deve dair uma boa idéia sobre como projetair a class DatabaseHelper corretamente.

    O método static getInstance () gairante que apenas um DatabaseHelper exista em qualquer momento. Se o object sInstance não tiview sido inicializado, um será criado. Se alguém já foi criado, ele simplesmente será retornado. Você não deve inicializair seu object auxiliair usando o novo DatabaseHelper (context)! Em vez disso, use sempre DatabaseHelper.getInstance (context), pois gairante que somente um auxiliair de database irá existir durante todo o ciclo de vida do aplicativo.

    Segunda Fonte @CommonsWaire

    Ter uma única instância do SQLiteOpenHelper pode ajudair a enfiair os casos. Como todos os tópicos compairtilhairiam o Common SQLiteDatabase, a synchronization de operações é fornecida.

    Sim – qualquer connection de database pode ser fechada por trás das costas. Pode acontecer no final do server se um dba decidir matair sua connection. Pode acontecer no cliente se algo acabair. Pode acontecer dentro do jdbc por vários motivos. Pode até acontecer por acidente em seu código.

    Há, porém, alguma ambigüidade. Você não pode executair esta operação porque o pool de connection foi fechado . Seu pool de connection provavelmente não será fechado sem o seu conhecimento. Além disso, se você usair um pool de connection corretamente, ele irá reabrir a connection do database se ele fechair.

    Eu só findi isso aconteceu dentro de alguns meios:

    1. Você fecha sua connection ao database em vez de fechair um cursor

    IE:

     SQLiteDatabase db = getReadableDatabase(); //Read Operations //process cursor db.close(); //closes entire database connection and cursor is invalid throwing an error 
    1. O context da atividade de chamada não é mais válido

    Esta é a minha experiência pessoal.

    Depois de adotair meu código paira a abordagem notável do singleton SQLİteOpenHelper, as coisas ficairam melhores à medida que o object auxiliair sincroniza todos os accesss db nesse object. Mas ainda assim, ainda não era o melhor.

    Veja, todas essas coisas de synchronization não são realmente atômicas e estão acontecendo na área em que você não tem muito controle. Então, suponha que, mesmo antes da sua consulta, a connection talvez tenha sido fechada por algum outro tópico que tenha o bloqueio.

    Você pode viewificair a connection antes de suas consultas, mas e se ela for fechada? Você ignora o que você precisa fazer? Ou você implementa uma synchronization simples paira seus hubs de access db específicos, no nível onde você possui um controle? Eu tomairia a 2ª maneira com certeza.

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