style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Conexión de java Access usando ucanaccess tarda

Buenas tardes, días, o noche, a todos los del foro... gusto en saludarlos..

Tengo unos problemas de java con access usando ucanacces como controlador para la conexión... (se podría decir).
resulta que estoy migrando un pequeño sistema con base de datos access creado en 97, este sistema esta echo supongo que en VB 6.0, usando base de datos access, el motivo por la cual estoy migrando este sistema. es que ya no se ejecuta bien en un equipo con windows vista, 7, y menos de los actuales como 8, 10,. También porque ya se venció la licencia que Hera por un año, y para el cliente es un gorro estarlo usando solo por 30 días, restaurar el equipo con una imagen echa con el Norton Ghost, volver a instalar, pasar los archivos necesarios la base de datos con la que trabaja... entonces pues estoy migrando el sistema.

Como les decía la base de datos esta en access 97, el sistema es de un control de pacientes. algo sencillo, carga una foto, la cual en la tabla tiene un campo foto, de tipo texto, no como mysql, que tiene campos tipo blob o longblob; este campo foto tipo texto pues solo guarda la ruta en donde se encuentra la imagen o al momento de guardar crea una carpeta de Imágenes en donde se van guardado los demás fotos de los pacientes.., en campo aparece C:\Archivos de Programa\sistema\imagenes\foto.jpg
el sistema anterior tiene la opción de buscar la base de datos access, (El cliente siempre lo tiene en una memoria usb... que por si le roban su Laptop, pues la información lo tiene en la usb).

Como les decía que estoy migrando entonces el sistema. la base de datos la abro en un access 2010, la cual tiene que hacer una conversión del archivo etc. ya la convertí, y ahora prosigo a agregarle un campo tipo Objeto OLE, para guardar almacenar la foto.

La tabla contiene 11 mil registros de las cuales como unas 2 mil tienen fotos, y el resto no.. entonces lo que yo hice es que, las que no tenia foto, le puse una imagen con una cara gris, que es sin foto, cargue las imágenes que por cierto tardo mucho para cargarlo..... antes la base de datos pues pesaba 33 MB, ya cargando las imágenes ahora pesa 107 MB, (Estoy conciente de que con imágenes la base de datos tiene a crecer rápidamente).

Bueno estaba muy contento de finalmente haber cargado las imágenes, pero cual fue mi sorpresa... que ahora al ejecutar el programa y hacer la conexión con la bd. tardo pasadito de 8 minutos en mostrarme el loguin. de la cual anterior mente sin las fotos cargadas pues tarda al rededor de 8 o 10 segundos...

Quisiera que me sugirieran algo para agilizar la conexión para que no tarde tando.. imagínate con un bd que pesa 107 MB tarda 8 minutos ya me imagino que un par de años cuando pese 300 MB, me va tardar media hora en conectarse.. no pues ta cañón no...

Ya hice mis revisiones anteriormente tenia esta linea en la conexión de base de datos..

url = "jdbc:ucanaccess://" + XMLFileConfig.getDireccion() + XMLFileConfig.getNombreBaseDedatos()+";jackcessOpener=Config.CryptCodecOpener;"+"memory=false";

Con esta linea pues les dacia que tardo un poco mas de 8 minutos. cambiando la linea de código de la siguiente forma..

url = "jdbc:ucanaccess://" + XMLFileConfig.getDireccion() + XMLFileConfig.getNombreBaseDedatos()+";jackcessOpener=Config.CryptCodecOpener;"+"memory=true";

Con este cambio ya tardo menos.. 45 segundos en conectarse... es un cambio muy notable..
........................................................................................................................................................................................................
Pero sigo pensando que se tarda mucho en conectar.. como hacer para que se agilice la conexión.
........................................................................................................................................................................................................

Volviendo un poco al cambio de linea de código de la conexión con access..
resulta que al cargar las imagenes  "memory=false"; nunca me marco un error eso si tardo como 3 horas en cargar las imagenes.. supongo que me pase al mandarle todo de un jalon que haga la actualizacion..

tengo esta linea de código donde obtengo la ruta de la imagen y prosigo a convertirlo en un arreglo de bytes[] y despues almacenarlo en un ArrayList

..
public ArrayList <Object> cargar_images(){
    ArrayList<Object> datos = new ArrayList<>();
    byte[] foto=null;
    try {
        for (int i = 0; i < tbl_cargarFotos.getRowCount(); i++) {
            for (int a = 0; a < tbl_cargarFotos.getColumnCount(); a++) {
                if (a == 0) {
                    datos.add(tbl_cargarFotos.getValueAt(i, a).toString());
                }
                if (a == 4) {
                    //int total1 = tbl_cargarFotos.getValueAt(i, a).toString().length()+1;
                    if(tbl_cargarFotos.getValueAt(i, a) ==null || tbl_cargarFotos.getValueAt(i, a).toString().equals("")){
                     foto = Utilidades.convertirFileIntoByteArray(new File("C:/Archivos de Programa/DPA/Imagenes/sinphoto.jpg"));
                     datos.add(foto);
                    }else{
                        //System.out.println("No. "+tbl_cargarFotos.getValueAt(i, 0)+" Imag: "+ tbl_cargarFotos.getValueAt(i, a));                        
                        foto = Utilidades.convertirFileIntoByteArray(new File(""+tbl_cargarFotos.getValueAt(i, a).toString()+""));
                        datos.add(foto);
                    }
                }
            }
        }
    } catch (IOException e) {
        System.out.println(e);
    }
    return datos;
}
Después de cambiar la conexión access a "memory=true"; al querer cargar las imágenes me manda este error
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.7 java.lang.OutOfMemoryError: Java heap spa
ce
Sature igual la memoria de la maquina virtual de java.. tuve que hacer de esta manera para hacer la prueba de volver a cargar las imágenes..
java -Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m  -jar example.jar
pero igual tarda en cargar las imágenes.. de hacer el update en la tabla.. pero esta pequeña utileria para cargar las imágenes es lo de menos porque nomas se va ocupar una vez.. y también podría mandarle la a cargar la imagen a la bd de 100 en 100 por decir para no saturar la memoria... -------------------------------------------------------------------------------------------------------------------------------------------------------- Me gustaría recibir soluciones. opiniones. recomendaciones... ustedes que son buenos programando en java =(0.o)= para mejorar el rendimiento de la conexión de java con access..., que no se cuelgue, etc.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de pechsclk

tarda con conectarse

Bueno ya que nadie opino aqui esta mi opinion para futuras.. consultas..

Resulta que mejor migre todo lo de access a mysql. todo bien, al cargar las imagenes en la base de datos..
como les decia cuenta con mas de 11 mil registros y hay que cargarle las imagenes.. pero al momento de actualizar o cargar las imagenes me tira el error similar a esto

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.7 java.lang.OutOfMemoryError: Java heap spa
ce

pero ahora de mysql, el error es relacionado con java.lang.OutOfMemoryError: Java heap spa

bueno y lo que termine aciendo es que por cada foto que cargaba en la base de datos tenia que serrar la instrucion de esta manera.

run_mysql = conec.conx.prepareCall("call pa_actualziar_foto(?,?)");
            run_mysql.setString(1, datos.get(0));
           run_mysql.setBytes(1, (byte[])datos.get(0));
            s = run_mysql.executeUpdate();
            run_mysql.close(); // y aqui cerraba

y solamente cerrando ya ebita el error de java.lang.OutOfMemoryError: Java heap spa,
y asi anteriormente le decia que para subir las 11 mil fotos tardo 3 horas en cargar. con este cambio tardo mucho menos 15 minutos.. y cambio muy notable.----

bueno espero que alguien mas le sirva

Imagen de ezamudio

space

El mensaje completo es Java heap space. Pero bueno a fin de cuentas se estaba terminando la memoria porque no estabas liberando recursos y efectivamente la solución era cerrar la conexión de vez en cuando (no tiene que ser una conexión por imagen, puede ser cada 10 por ejemplo).

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">