Se si desidera precompilare un database (SQLite) in Android, non è così facile come si potrebbe pensare.Il modo più veloce ed efficiente per precompilare il database in Android
Quindi ho trovato this tutorial che viene spesso indicato anche qui su Stack Overflow.
Ma non mi piace molto questo modo di pre-compilare il database poiché si prende il controllo dal gestore database e si creano i file da soli. Preferirei non toccare il file system e lasciare che il gestore del database faccia tutto da solo.
Così che cosa ho pensato che si potrebbe fare è creare il database in onCreate del gestore di database() come al solito ma poi caricare un file (sql) da/attivi che contiene le istruzioni per compilare i valori:
INSERT INTO testTable (name, pet) VALUES ('Mike', 'Tiger');
INSERT INTO testTable (name, pet) VALUES ('Tom', 'Cat');
...
Ma chiamare execSQL() nel gestore onCreate() non funziona. Sembra che il file/assets non deve avere più di 1 MB e execSQL() esegue solo la prima istruzione (Mike - Tiger).
Cosa farebbe pre-compilare il database?
hai letto la documentazione di execSQL? ... anway ... è possibile archiviare i dati in json o eseguire il db temporaneo pre-polimerizzato e copiarlo nel database creato da hander – Selvin
Naturalmente, l'ho letto. Suggeriscono di utilizzare un oggetto ContentValues e inserirlo nel database utilizzando il metodo insert (...). Ma execSQL (...) non è sbagliato. E - qualunque approccio tu scelga - non farà molto alla velocità se sceglierai un'alternativa. – caw
Creare un database in anticipo e copiarlo è esattamente ciò che ho descritto nella domanda;) E JSON non sarà più veloce del mio approccio con il file di istruzioni .sql precostruito. A causa della conversione, sarà anche più lento. – caw