Não tenho 100% de certeza, mas suspeito que o problema é que você está armazenando a conexão com o banco de dados em vez de recuperá-lo sempre que precisar acessar o banco de dados. A documentação do LocalStorage diz: "As conexões do banco de dados são fechadas automaticamente durante a coleta de lixo do Javascript." Isso me faz pensar se a conexão está fechada no final da função openDB()
, pois ela não reconhece que a conexão está sendo armazenada em uma propriedade QML.
Eu altero o código para que openDB()
chama openDatabaseSync()
a cada vez e retorne à conexão do banco de dados com o chamador, que o usará como uma variável local. Este é o padrão que eu sempre vi usado.
Parece que o código de inicialização do seu banco de dados está devidamente protegido, mas pode haver uma abordagem melhor. O primeiro seria passar um retorno de chamada para openDatabaseSync()
. Isso só será chamado se o banco de dados for criado agora e uma conexão de banco de dados for passada como um argumento. Assim, o código de inicialização pode ser executado dentro da chamada de retorno. Outra abordagem seria verificar db.version
após obter a conexão. Na primeira execução, esta será a string vazia. Em execuções posteriores, ele será definido para o valor passado em openDatabaseSync()
. Verificar este valor também é útil para executar atualizações de banco de dados.
Como exemplo, você pode conferir este arquivo QML do meu projeto Beru .