la base de datos de mi solicitud se tienen que cubrir con una gran cantidad de datos, por lo que durante onCreate()
, es no sólo algunos crean tabla de SQL instrucciones, hay una gran cantidad de inserciones. La solución que elegí es almacenar todas estas instrucciones en un archivo sql ubicado en res/raw y que está cargado con Resources.openRawResource(id)
.Creación de base de datos de aplicaciones androide con gran cantidad de datos
Funciona bien pero tengo problemas de codificación, tengo algunos caracteres acentuados en el archivo sql que parece malo en mi aplicación. Este mi código para hacer esto:
public String getFileContent(Resources resources, int rawId) throws
IOException
{
InputStream is = resources.openRawResource(rawId);
int size = is.available();
// Read the entire asset into a local byte buffer.
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
// Convert the buffer into a string.
return new String(buffer);
}
public void onCreate(SQLiteDatabase db) {
try {
// get file content
String sqlCode = getFileContent(mCtx.getResources(), R.raw.db_create);
// execute code
for (String sqlStatements : sqlCode.split(";"))
{
db.execSQL(sqlStatements);
}
Log.v("Creating database done.");
} catch (IOException e) {
// Should never happen!
Log.e("Error reading sql file " + e.getMessage(), e);
throw new RuntimeException(e);
} catch (SQLException e) {
Log.e("Error executing sql code " + e.getMessage(), e);
throw new RuntimeException(e);
}
La solución que encontré para evitar esto es cargar las instrucciones SQL de una enorme static final String
en lugar de un archivo y todos los caracteres acentuados parece bien.
¿Pero no hay una manera más elegante de cargar instrucciones sql que un gran atributo static final String
con todas las instrucciones sql?
Muchas gracias a Dave – tbruyelle