Cómo importar db a sqlite pre-fabricados administrado por ormlite

Tengo un archivo. Db y quiero configurarlo en la primera ejecución de mi aplicación Android. Uso OrmLite para administrar mi base de datos.

En ese archivo .db tengo unos 7000 registros y cuando quiero importarlo por métodos comunes (usar foreach – crear comando) se necesita mucho tiempo (aproximadamente 2-3 minutos) para importar.

¿Como puedó resolver esté problema?

Gracias

Digamos que tiene una base de datos denominada " prepared.db " y su nombre de paquete es " com.example.android ". Esto es lo que hago.

  1. Asegúrese de que la base de datos preparada está en la carpeta de activos.
  2. En el constructor de clase que extiende OrmLiteSqliteOpenHelper, compruebe si existe o no una base de datos.
  3. Si la base de datos NO existía , copie db de la carpeta de activos

(Tanto el Paso 2 como el 3 pasan dentro del constructor)

Esto es muestra de código y funciona para mí.

 public class DatabaseHelper extends OrmLiteSqliteOpenHelper { private static final String DATABASE_NAME = "prepared.db"; private static final String DATABASE_PATH = "/data/data/com.example.android/databases/"; public DatabaseHelper(Context context) { super(context, DATABASE_PATH+DATABASE_NAME, null, DATABASE_VERSION); boolean dbexist = checkdatabase(); if (!dbexist) { // If database did not exist, try copying existing database from assets folder. try { File dir = new File(DATABASE_PATH); dir.mkdirs(); InputStream myinput = mContext.getAssets().open(DATABASE_NAME); String outfilename = DATABASE_PATH + DATABASE_NAME; Log.i(DatabaseHelper.class.getName(), "DB Path : " + outfilename); OutputStream myoutput = new FileOutputStream(outfilename); byte[] buffer = new byte[1024]; int length; while ((length = myinput.read(buffer)) > 0) { myoutput.write(buffer, 0, length); } myoutput.flush(); myoutput.close(); myinput.close(); } catch (IOException e) { e.printStackTrace(); } } } /* * Check whether or not database exist */ private boolean checkdatabase() { boolean checkdb = false; String myPath = DATABASE_PATH + DATABASE_NAME; File dbfile = new File(myPath); checkdb = dbfile.exists(); Log.i(DatabaseHelper.class.getName(), "DB Exist : " + checkdb); return checkdb; } } 

PS: Si el tamaño del archivo de base de datos es más de 1 MB, se producirá un error. Puede dividir la base de datos para resolver dicho problema.

Si desea proporcionar los datos como un db externo, puede volcar en o más tablas (definición y datos) utilizando

 sqlite3 prepared.db ".dump mytable" > dump.sql 

E importarlos usando

 sqlite3 main.db < dump.sql 

Si desea configurar cosas de forma programática en Java, asegúrese de hacer todo en una sola transacción usando TransactionManager.callInTransaction , ya que múltiples commit (autocommits) son bastante costosos en SQLite.

  • SQLite "INSERT OR REPLACE INTO" no funciona
  • Cómo encontrar y borrar el archivo db de SQLite en Android (emulador)
  • getApplicationContext () devuelve null, pero funciona en otras actividades
  • Datos dinámicamente de datos de tabla de Android
  • Android table creation Fallo (cerca de "autoincrement": error de sintaxis)?
  • Error al descifrar en java
  • Android: niveles de aislamiento de transacciones SQLite (ORMLite)
  • Android - Base de datos SQLite en tarjeta SD
  • Close () nunca fue explícitamente llamado en Android y SQlite
  • La aplicación se bloquea al iniciar Debido a java.lang.IllegalArgumentException: la columna '_id' no existe
  • Contactos de Android: Colocación / clasificación local incorrecta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.