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:
- Consulta de SQLite menor o mayor que check
- Cómo ocultar filas específicas de un cursor en android
- Identificar el tipo de datos de una columna en un Cursor Android de SQLite
- Excepción de puntero nulo de SQLite de SQLite
- Android: ¿Cómo acceder a una sola base de datos de múltiples actividades en la aplicación?
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
- Cómo convertir el objeto de cursor en XML o JSON en android
- En GreenDao, genere una consulta de unión con OR en lugar de AND
- La forma más rápida de buscar a través de cadenas almacenadas en la base de datos sqlite
- Mal funcionamiento al eliminar de la tabla de base de datos Sqlite (comportamiento extraordinario de relación)
- Un simple ejemplo androide de Córdova incluyendo Sqlite leer / escribir y buscar
- Android android.database.CursorIndexOutOfBoundsException: Índice x solicitado, con un tamaño de x
- ¿Está correcta la documentación de Android Cursor.moveToNext ()?
- ¿Podemos actualizar el APK en Google Play Store sin cambiar la versión de APP
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?