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

2 Solutions collect form web for “Cómo importar db a sqlite pre-fabricados administrado por ormlite”

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.

  • Leer 3 elementos seleccionados al mismo tiempo
  • Establecer un valor predeterminado en una columna en SQLite
  • Android: ¿Qué tan segura es la base de datos con la aplicación
  • Android DataBase está bloqueado por otro hilo
  • Android SQCipher ¿Necesito cerrar la base de datos?
  • Android - ¿Existe la base de datos SQLite?
  • ¿Cómo pasar el valor de la cadena separada por coma en la consulta SQL?
  • SQLite es sin tipo?
  • Portable JDBC vs SQLite en Android
  • RawQuery Vs. Database.query
  • Cierre de la base de datos en un ContentProvider
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.