Comunidad de diseño web y desarrollo en internet online

Flex/AIR - Guardar imágenes en base de datos SQLite.

Citar            
MensajeEscrito el 01 May 2008 12:43 am
Hola! Estoy realmente quemando mi cerebro tratando de encontrar una solución a mi problema! A ver si me ayudan...
Por el momento estoy realizando lo siguiente:
Con un Loader obtengo la imágen que quiero guardar (funciona OK)
Llamo a la funcion "guardarImagen" cuando se completo la carga de la imágen (por ende la imágen pende del objeto event tipo Event).
Luego codifico la imágen a JPG mediante JPGEncoder (funciona OK)
Abro una conexión con la Base de Datos mediante SQLConnection (funciona OK)
Finalmente escribo el comando SQL en un string y lo asigno al método TEXT de la conexión para luego ejecutarlo.
Aquí viene el problema.. Les paso el código AS3:

NOTA:
La base de datos es creada en tiempo de ejecución, mediante el siguiente código SQL (funciona OK y la base se crea PERFECTAMENTE).

Código :

public function crearTablas():void
{
   var createObj:SQLStatement = new SQLStatement();  
   var strSQL:String = new String();

   strSQL = "CREATE TABLE IF NOT EXISTS imagenes(";
   strSQL += "cod_propiedad INTEGER PRIMARY KEY AUTOINCREMENT,";
   strSQL += "imagen BLOB";
   strSQL += ");";

   createObj.text = strSQL;
   createObj.sqlConnection = conn;
   createObj.execute();


Ahora sigue el código que comprime imágen a JPG con calidad máxima (100) y luego "intenta" guardarla en la Base de Datos:

Código :

private function guardarImagen(event:Event):void
{
   var bmd:BitmapData = Bitmap(event.currentTarget.content).bitmapData;
   var jpegEnc:JPEGEncoder = new JPEGEncoder(100);
   var selectObj:SQLStatement = new SQLStatement();
   var strSQL:String;

   strSQL = "INSERT INTO imagenes (imagen) + "VALUES ("+jpegEnc.encode(bmd)+")";
   selectObj.sqlConnection = conn;
   selectObj.text = strSQL;
   selectObj.execute();
}


Al entrar en la ultima línea "selectObj.execute();" tira el siguiente error:

Código :

SQLError: 'Error #3115: SQL Error.', details:'near "ÿØÿà": syntax error', operation:'execute'
   at flash.data::SQLStatement/internalExecute()
   at flash.data::SQLStatement/execute()


NOTA 2:
Si realizo un "trace" del ByteArray que devuelve la función "jpegEnc.encode(bmd)" obtengo información correcta de la imágen, o sea que se intentan guardar los datos correctos, pero por algún motivo que desconozco no se están guardando. También aclaro que el campo "imagen" de la Base de Datos es de tipo BLOB, que me pareció el correcto para imágenes de acuerdo a los cientos de foros que recorrí con respecto a imágenes guardadas en Bases de Datos.

Bueno.. espero no haber sido muy complicado y que todo se comprenda... POR FAVOR!! AYUDA!!!
Mil gracias muchachos!!
Salu2 ^^

Por Argenfer

4 de clabLevel



Genero:Masculino  

safari
Citar            
MensajeEscrito el 01 May 2008 03:17 pm
Prueba guardando como String(jpegEnc.encode(bmd))

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 01 May 2008 05:10 pm

Zah escribió:

Prueba guardando como String(jpegEnc.encode(bmd))


Gracias!
Lo acabo de probar y da exactamente el mismo error:

Código :

SQLError: 'Error #3115: SQL Error.', details:'near "ÿØÿà": syntax error', operation:'execute'
   at flash.data::SQLStatement/internalExecute()
   at flash.data::SQLStatement/execute()



:crap:

Por Argenfer

4 de clabLevel



Genero:Masculino  

safari
Citar            
MensajeEscrito el 02 May 2008 04:21 pm
:?

Lo que estás intentando hacer es súmamente peligroso, guardar una imagen en una base de datos SQL lite, que no tiene protección alguna es como poner un letrero que diga 'Hackeame porfavor'. Si estás utilizando AIR ¿No sería mejor guardar la imagen en disco y en la base de datos sólo la referencia a esa imagen?

El código de error que te tira es porque muchos de los caracteres que se representan como String dentro de la imagen son caracteres no válidos para el SQL lite. En caso de que no te importe mi advertencia anterior te sugiero que utilices escape() para que todos los caracteres sean legibles, aunque esto no garantiza la integridad de la imagen

Por Quantium

5 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 02 May 2008 06:38 pm
Gracias Quantium!
Sí, se quería implementar de esta manera porque la aplicación AIR no tiene acceso a Internet y no se querían dejar imágenes disponibles en el disco con acceso desde el mismo S.O.
Pero visto y considerando las advertencias y opiniones, no solo en este, sino otros foros, voy a tener que implementar solo el guardado del Path de la imágen.
Mil gracias!!

PD: Me encantó el estilo James Bond que le diste al principio!! JAJAJAJA!! (- "Lo que estás intentando hacer es súmamente peligroso" -)
Saludos y gracias!!! :)

Por Argenfer

4 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.