SQLite – ¿Es posible insertar un BLOB a través de la instrucción insert?
Estoy desarrollando una aplicación de Android y estoy usando una base de datos Sqlite para almacenar algunos mapas de bits. Quiero que algunas imágenes se inserten automáticamente cuando el usuario instala la aplicación.
Estoy usando la clase SQLiteOpenHelper como esta:
- ¿Cómo implementar deshacer un solo paso para los cambios en la base de datos SQLite?
- Android obtener la imagen de disco de base de datos es malformado (código 11) error
- Cómo convertir el objeto de cursor en XML o JSON en android
- Error No se puede realizar esta operación porque se ha cerrado el grupo de conexiones
- Buscar sugerencias de diferentes tablas en diferentes actividades
public class DatabaseHelper extends SQLiteOpenHelper { ... DatabaseHelper(Context context, String nameOfDB, int version, String[] scriptSQLCreate, String scriptSQLDelete) { super(context, nameOfDB, null, version); this.scriptSQLCreate = scriptSQLCreate; this.scriptSQLDelete = scriptSQLDelete; } @Override public void onCreate(SQLiteDatabase db) { int numScripts = scriptSQLCreate.length; for(int i = 0; i<numScripts; i++){ Log.i(TAG,"Creating database, executing script " + i); db.execSQL(scriptSQLCreate[i]); } } }
…
Quiero pasar una constante al parámetro scriptSQLCreate mostrado arriba que sería así:
private static final String[] SCRIPT_DATABASE_CREATE = { "create table memes( id integer primary key autoincrement," + + " img blob not null," + + " name text not null unique)" , "insert into memes(img,name) values(BITMAP1,'1.jpg')", "insert into memes(img,name) values(BITMAP2,'2.jpg')", "insert into memes(img,name) values(BITMAP3,'3.jpg')"} }
Cualquier ayuda será muy apreciada,
Thx, Tulio Zahn
- ¿Cursor.getString () coacciona un int en una cadena?
- Android - Pulling SQlite base de datos dispositivo Android
- Rendimiento de Android ContentProvider
- ¿Cómo puedo anotar correctamente las clases de herencia usando ORMLite?
- GreenDAO - clave primaria en varias columnas
- Obtención del tipo de una columna en SQLite
- La base de datos SQLite de Android está bloqueada
- Recuperar una lista de todas las tablas de la base de datos
Si realmente quieres, puedes usar un literal hexagonal muy largo como un literal de blob:
insert into memes(img, name) values(X'0102030405060708090a0b0c0d0e0f', '1.jpg')
Sin embargo, esto suele ser una mala idea; En su lugar, vea las consultas parametrizadas . Ellos le permiten compilar una declaración una vez utilizando marcadores de posición en lugar de valores reales y, a continuación, reutilizarlo muchas veces, rellenando los marcadores de posición según sea necesario:
SQLiteStatement p = sqlite.compileStatement("insert into memes(img, name) values(?, ?)"); byte[] data = loadData("1.jpg"); p.bindBlob(1, data); p.bindString(2, "1.jpg"); p.execute(); byte[] data = loadData("2.jpg"); p.bindBlob(1, data); p.bindString(2, "2.jpg"); p.execute();
(Advertencia — código no probado.)
En general, debe estar utilizando consultas parametrizadas en todas partes , ya que son una manera segura de evitar ataques de inyección de SQL, además suelen ser más fácil y más claro. El ensamblaje de consultas SQL mediante encolado de cadenas debe evitarse a toda costa.
Su tabla de datos tiene alguna palabra invisible que no puede ver. Compruebe su archivo db con las herramientas de db como navicat para sqlite. Preste atención a la palabra de error en la tabla.
- No se puede ejecutar un programa Java Android con Valgrind
- ¿Cómo usar la marca de hora del servidor Firebase para generar la fecha creada?