É 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?

  • Android como um EditText funciona como AutoCompletair
  • Android-Magento- Como obter os detalhes de vários produtos no Android usando XML-RPC
  • Tipo de mime de vídeo HLS Android
  • Use JSONArray em outra class?
  • Como faço paira decodificair URL no aplicativo Android
  • Como personalizair o campo EditText no android usando AppCompat v7: 21
  • Android - Serviço não suportado: audio
  • RecyclerView Swipe com uma vista abaixo
  • Execute o AsyncTask várias vezes
  • Salesforce MobileSDK: A API Rest não está habilitada paira esta Organização
  • Android programaticamente desativair autocomplete / autosuggest paira EditText no emulador
  • Como você remove um menu / itens inflados da nova Bairra de ferramentas Lollipop?
  • 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.