Demora para registrar 2000 registro no SQLite

Galera boa tarde, tudo bem?

Bom venho aqui pedir a ajuda de voces.

Criei uma aplicação que faz comunicação com um ws, esse webservice disponibiliza um json de uma base de dados pra mim com mais de 2.000 registro.

E na minha aplicação eu pego esses 2000 registro e gravo no banco de dados(sqlite), mas no momento da sincronização demora qse 15 minutos pra receber todos os registros. Estou usando thread no momento da sincronização e uso um framework de persistencia no android chamado droidpersistence.

Alguem poderia me ajudar como eu posso fazer pra minha aplicação ficar mais rapida, sera que o motivo pode ser esse framework que estou usando?

Desde ja agradeço. Abraços =]

Quando uso SQLite no Windows ou no Linux (mas não sei se é esse o caso no Android) eu uso, imediatamente depois de abrir a conexão com o banco, o seguinte comando: PRAGMA SYNCHRONOUS=NORMAL. (Nâo sei se você consegue, usando esse framework, mandar esse comando diretamente para o banco.)

Se eu não fizer isso, o SQLite fica muito lento para inserção de dados.(o default dele é PRAGMA SYNCHRONOUS=FULL).

http://www.sqlite.org/pragma.html#pragma_synchronous

entanglement, obrigado pela ajuda, ele estava com o mesmo problema que eu estou, so não entendi onde e como ele executou o PRAGMA SYNCHRONOUS=NORMAL, li o blog mas ele nao diz onde ele usou isso.

Vou estudar mais sobre esse problema, obrigado novamente. =]

Douglas, eu não sei se é fácil dar esse comando se você usar esse tal framework. Provavelmente o melhor resultado que você pode obter é criar uma transação, executar a importação desses 2000 registros dentro da transação, e então efetivar (“comitar”) a transação.

  • Estou usando esse verbo “comitar”, obviamente sabendo que ele não existe em português, porque é o que as pessoas usam na prática. Ninguém diz “efetivar” uma transação :slight_smile: - pelo menos que eu conheça aqui.

entendi, mas vc, sem sem o framework teria como me mostrar como vc ussa esse comando pra mim ver como funciona mais ow menos. Obrigado =]

Para você mandar um comando para o banco que não seja um SELECT, INSERT ou outro comando padrão do SQL (como é o caso do PRAGMA), normalmente se usa um executeUpdate mesmo (no JDBC, método da interface Statement. )