Como guardar la ruta de un archivo en tabla MySQL y java
27 febrero 2011 81 comentarios
A veces en algun programa necesitamos guardar la ruta de un archivo. Por ejemplo si es un programa para llevar el control de empleados tal vez sera necesario guardar las fotografias de los empleados o una imagen de un producto, o la ruta de un archivo de documento, etc. Es por eso que se me ocurrio mostrar como se puede guardar la ruta de un archivo en una tabla de MySQL y recuperarla.
Parece facil, pero tiene su chiste, bueno para mostrar voi a diseñar una sencilla BD con una sola tabla que se llame productos con 3 unicos campos: el Id, el nombre del producto y su imagen (imagen muestra del producto). Los comandos SQL para crear la BD y la tabla son los siguientes:
CREATE DATABASE pruebaRuta; USE pruebaRuta; CREATE TABLE productos(id int auto_increment not null,nombre varchar(100), imagen varchar(2000), primary key(id) );
Observe que el id es auto_increment y por lo tanto el DBMS lo genera automaticamente, el campo imagen guarda una cadena que sera la ruta donde esta la imagen del producto.
Ahora imaginemos que las imagenes las tenemos almacenadas en la siguiente ruta del disco duro: c:\imagenes\productos. Podria pensarse que para realizar una insercion para registrar un nuevo producto en la tabla se haria con el comando:
INSERT INTO productos(nombre, imagen) VALUES('Chiles chipotles','c:\imagenes\productos\chipoles_100gr.jpg');
y de hecho si ese comando lo ejecutamos en la consola de MySQL nos dice que se inserto con exito:
bien, ahora hagamos un SELECT de la tabla para mostrar si se inserto…
…pero hooo! sorpresaa faltan las diagonales (slash). al parecer el DBMS las toma como secuencias de escape y las omite, no las guarda pues, desconozco sinceramente por que no guarda las diagonales pero e ideado una clase java que agrega doble diagonal o cualquier otro caracter para reemplazar los separadores de carpetas por unos que si son validos. La forma correcta de registrar un nuevo producto es esta:
INSERT INTO productos(nombre, imagen) VALUES('Chiles chipotles','c:\\imagenes\\productos\\chipoles_100gr.jpg');
ahora muestro como MySQL no manda error:
y ahora otra vez el SELECT y vemos como ahora si se guardo correctamente
aahh esta vez si se inserto bien la ruta del producto. Obviamente que las inserciones aqui hechas se han hecho desde la linea comandos del cliente de MySQL pero esta operaciones de INSERT se hacen mediante un programa java con una interfaz de usuario y esas cosas.
Para ilustrar todo esto con un ejemplo practico he creado 3 clases: JfrPrincipal.java, JfrAltaProductos.java, JfrVisorProductos.java, los cuales voi a ir explicando poco a poco a continuacion. No olvidar que el objetivo de este ejemplo es la de mostrar como mandar correctamente la ruta de un archivo a una tabla de MySQL y como recuperarla para mostrar el archivo (p. ej. imagenes, .txt) o abrirlo. A continuacion muestro el diagrama de clases del ejemplo:
Como se puede observar la clase que nos interesa la e resaltado en otro color, esta clase se instancia desde la clase JfrAltaProductos.java que es la que nos permite dar de alta a un nuevo producto, se llama desde aqui por que antes de dar de alta un producto (INSERT) se debe correguir la ruta.
JfrPrincipal.java
Este archivo es la clase principal y unicamente tiene la funcion de mostrar una GUI con dos botones para que el usuario elija abrir el visor de imagenes o agregue un nuevo producto. En el codigo hay algunos comentarios para describir brevemente que es lo que se hace:
/* Instituto Tecnologico de Zacatepec, Mor. Descripcion: Ventana principal del ejemplo, desde esta interfaz el usuario puede elegir entre ver las imagenes o dar de alta un nuevo producto. Autor: Gonzalo Silverio gonzasilve@gmail.com Archivo JfrPrincipal.java */ import javax.swing.*; import java.awt.FlowLayout; import java.awt.event.*; public class JfrPrincipal extends JFrame { //Constructor JfrPrincipal(String titulo, int ancho, int alto) { //Establecer titulo, tamanio y posicion en la pantalla super(titulo); setSize(ancho,alto); setLocationRelativeTo(null); //centrado //Rotulo principal de la ventana JLabel lblTitulo = new JLabel("Ventana principal"); JPanel panTitulo = new JPanel(new FlowLayout(FlowLayout.CENTER)); panTitulo.add(lblTitulo); //Crear el boton nuevo JButton btnNuevo = new JButton("Nuevo"); JPanel panNuevo = new JPanel(new FlowLayout(FlowLayout.CENTER)); panNuevo.add(btnNuevo); //Crear el boton para abrir el visor de imagenes JButton btnVisorImagenes = new JButton("Visor de imagenes"); JPanel panVisor = new JPanel(new FlowLayout(FlowLayout.CENTER)); panVisor.add(btnVisorImagenes); //Todos los componentes estan en un Box Vertical //para alinear los controles Box boxVertical = Box.createVerticalBox(); boxVertical.add(Box.createVerticalStrut(50)); boxVertical.add(panTitulo); boxVertical.add(panNuevo); boxVertical.add(panVisor); //Agregar el Box a la ventana add(boxVertical); setResizable(false); //No maximizar ni cambiar tamanio //Al dar en la X terminar todo el programa setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ########### ESCUCHADOR BOTON NUEVO ########## ActionListener escuchadorAlta = new ActionListener() { public void actionPerformed(ActionEvent evt) { JfrAltaProductos ejemplo = new JfrAltaProductos("Alta de un nuevo producto",400,400); ejemplo.mostrar(); //Ocultar la ventana principal setVisible(false); } }; btnNuevo.addActionListener(escuchadorAlta); // ########### ESCUCHADOR PARA BOTON VISOR DE IMAGENES ########## ActionListener escuchadorVisor = new ActionListener() { public void actionPerformed(ActionEvent evt) { JfrVisorProductos ejemplo = new JfrVisorProductos("Visor de imagenes de productos",400,400); ejemplo.mostrar(); //Ocultar la ventana principal setVisible(false); } }; btnVisorImagenes.addActionListener(escuchadorVisor); } //Fin del constructor //hace visible la ventana public void mostrar() { setVisible(true); } public static void main(String[] args) { JfrPrincipal ejemplo = new JfrPrincipal("Visor de Imagenes de productos",400,400); ejemplo.mostrar(); } }
Ahora muestro imagen de la ventana que genera el codigo anterior:
Como se puede ver es una interfaz muy sencilla y es el punto de entrada del programa.
JfrAltaProductos.java
Esta clase permite dar de alta un nuevo producto, es decir permite hacer un INSERT en la tabla de productos con el nombre del producto y la ruta que corresponde a una imagen previa de dicho producto. En el codigo se muestra los comentario correspondientes explicando el codigo:
/* Instituto Tecnologico de Zacatepec, Mor. Descripcion: Ventana para dar de alta a un nuevo producto, antes de dar de alta un producto se debe corregir la ruta del archivo de imagen del producto. Autor: Gonzalo Silverio gonzasilve@gmail.com Archivo: JfrAltaProductos.java */ import javax.swing.*; import java.awt.FlowLayout; import java.awt.Color; import java.awt.event.*; //Para usar la clase File con el FilesChooser import java.io.*; //Para usar operacion con BD (JDBC) import java.sql.*; public class JfrAltaProductos extends JFrame { //Script SQL para crear la tabla productos: //CREATE TABLE productos(id int auto_increment not null,nombre varchar(100), imagen varchar(2000), primary key(id) ); JTextArea jtaRutaImagen; JTextField jtfNombre; private static Connection con = null; Statement st; //Constructor JfrAltaProductos(String titulo, int ancho, int alto) { super(titulo); setSize(ancho,alto); setLocationRelativeTo(null); JLabel lblTitulo = new JLabel("Datos del producto"); JPanel panTitulo = new JPanel(new FlowLayout(FlowLayout.CENTER)); panTitulo.add(lblTitulo); //Crear una etiqueta y su campo de texto correspondiente para capturar el //nombre del producto JLabel lblNombre = new JLabel("Nombre: "); jtfNombre = new JTextField(20); JPanel panNombre = new JPanel(new FlowLayout(FlowLayout.LEFT)); panNombre.add(Box.createHorizontalStrut(15)); panNombre.add(lblNombre); panNombre.add(jtfNombre); //Crear el boton examinar JButton btnExaminar = new JButton("Examinar..."); btnExaminar.addActionListener(new seleccionarImagen()); //Crear el area de texto para mostrar la ruta absoluta del archivo JPanel panRutaImagen = new JPanel(new FlowLayout(FlowLayout.LEFT)); jtaRutaImagen = new JTextArea(4,20); jtaRutaImagen.setDisabledTextColor(Color.BLUE); jtaRutaImagen.setLineWrap(true); jtaRutaImagen.setEnabled(false); JScrollPane scrollRutaImagen = new JScrollPane(jtaRutaImagen); scrollRutaImagen.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scrollRutaImagen.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); panRutaImagen.add(Box.createHorizontalStrut(15)); panRutaImagen.add(scrollRutaImagen); panRutaImagen.add(btnExaminar); //Crear el boton Guardar JButton btnGuardar = new JButton("Guardar"); JPanel panGuardar = new JPanel(new FlowLayout(FlowLayout.CENTER)); panGuardar.add(btnGuardar); //Crear el boton Cancelar JButton btnCancelar = new JButton("Cancelar"); JPanel panCancelar = new JPanel(new FlowLayout(FlowLayout.CENTER)); panCancelar.add(btnCancelar); //Alinear los botones Guardar y Cancelar en forma horizontal Box boxGuardarCancelar = Box.createHorizontalBox(); boxGuardarCancelar.add(btnGuardar); boxGuardarCancelar.add(Box.createHorizontalStrut(30)); boxGuardarCancelar.add(btnCancelar); //Agregar todos los controles de usuario al Box Horizontal principal Box boxVertical = Box.createVerticalBox(); boxVertical.add(Box.createVerticalStrut(50)); boxVertical.add(panTitulo); boxVertical.add(Box.createVerticalStrut(50)); boxVertical.add(panNombre); JPanel panEtiquetaRuta = new JPanel(new FlowLayout(FlowLayout.LEFT)); panEtiquetaRuta.add(Box.createHorizontalStrut(15)); panEtiquetaRuta.add(new JLabel("Imagen previa del producto")); boxVertical.add(panEtiquetaRuta); boxVertical.add(panRutaImagen); boxVertical.add(Box.createVerticalStrut(10)); boxVertical.add(boxGuardarCancelar); boxVertical.add(Box.createVerticalStrut(100)); //Agregar el Box principal a este JFrame add(boxVertical); //No permitir maximizar ni redimensionar este JFrame setResizable(false); // ##################### ESCUCHADOR DE VENTANA ############################################# //Para que al dar clic en la x de la esquina de este JFrame //se muestre por default la ventana principal this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { JfrPrincipal ejemplo = new JfrPrincipal("Visor de Imagenes de productos",400,400); ejemplo.mostrar(); setVisible(false); } public void windowClosed(WindowEvent e) { JfrPrincipal ejemplo = new JfrPrincipal("Visor de Imagenes de productos",400,400); ejemplo.mostrar(); setVisible(false); } }); // ########### ESCUCHADOR BOTON CANCELAR ########## ActionListener escuchadorCancelar = new ActionListener() { public void actionPerformed(ActionEvent evt) { JfrPrincipal ejemplo = new JfrPrincipal("Visor de Imagenes de productos",400,400); ejemplo.mostrar(); setVisible(false); } }; btnCancelar.addActionListener(escuchadorCancelar); // ########### ESCUCHADOR BOTON GUARDAR ########## ActionListener escuchadorGuardar = new ActionListener() { public void actionPerformed(ActionEvent evt) { //Validar que NO haya campos vacios if(hayCamposVacios()) { JOptionPane.showMessageDialog(null,"Debes escribir el nombre y elegir la ruta de la imagen, hay campos vacios"); return; } if( conectarBaseDatos() ) { if( altaProducto() ) { JOptionPane.showMessageDialog(null,"Producto guardado con exito"); jtfNombre.setText(""); jtaRutaImagen.setText(""); } else JOptionPane.showMessageDialog(null,"No se pudo guardar"); } else JOptionPane.showMessageDialog(null,"No se pudo Conectar la BD"); } }; btnGuardar.addActionListener(escuchadorGuardar); } //Fin del costructor //Conecta la base de datos y se prepara para un sentencia SQL //Devuelve true solo si la conexion tuvo exito public boolean conectarBaseDatos() { try { Class.forName("com.mysql.jdbc.Driver"); String strCadenaConexion = "jdbc:mysql://localhost/pruebaRuta"; con = DriverManager.getConnection(strCadenaConexion,"root","12345"); if (con == null ) return false; //Preparar conexion para ejecutar una sentencia SQL st = con.createStatement(); return true; } catch(SQLException sqlex) { sqlex.printStackTrace(); return false; } catch(Exception e) { e.printStackTrace(); return false; } } //Realiza un ALTA en la tabla de productos //devuelve true solo si se pudo realizar con exito el INSERT en la tabla public boolean altaProducto() { try { String strRutaImagen; //Instanciamos la clase que corrige la ruta del archivo CorregirRuta ruta1 = new CorregirRuta(jtaRutaImagen.getText(),"\\", "\\\\"); //CORREGIR LA RUTA strRutaImagen = ruta1.obtenerRutaCorregidaWindows(); //Hacer el insert con la ruta corregida int res = st.executeUpdate("INSERT INTO productos(nombre,imagen) VALUES('"+jtfNombre.getText()+"','"+strRutaImagen+"')"); if(res==1) return true; else return false; } catch(SQLException sqlex) { sqlex.printStackTrace(); return false; } catch(Exception e) { e.printStackTrace(); return false; } } //Comprueba true si alguno de los 2 campos esta vacios public boolean hayCamposVacios() { if( jtfNombre.getText().isEmpty() || jtaRutaImagen.getText().isEmpty() ) return true; return false; } //hace visible la ventana public void mostrar() { setVisible(true); } //Clase interna class seleccionarImagen implements ActionListener { public void actionPerformed(ActionEvent ae) { String strSeleccionado; JFileChooser jfcSeleccionarArchivo = new JFileChooser(); //Asignar el filtro para que solo se vean imagenes en la ventana abrir jfcSeleccionarArchivo.addChoosableFileFilter(new FiltroImagenes()); //Filtro a usarse por defecto jfcSeleccionarArchivo.setFileFilter(jfcSeleccionarArchivo.getChoosableFileFilters()[1]); // Abre el cuadro de dialogo Abrir int retval = jfcSeleccionarArchivo.showOpenDialog(JfrAltaProductos.this); if (retval == JFileChooser.APPROVE_OPTION) { //... Si el usuario selecciono un archivo, entonces usarlo File filSeleccionado = jfcSeleccionarArchivo.getSelectedFile(); //Obtener ruta absoluta del archivo seleccionado strSeleccionado = filSeleccionado.getAbsolutePath(); //Mostrar la ruta al usuario en el area de texto correspondiente jtaRutaImagen.setText(strSeleccionado); } } } //fin de clase interna } //Fin de la clase
A continuacion muestro una imagen de la ventana que se genera:
Dejando campos vacios…
Como se observa e insertado un producto de ejemplo para ilustrar como funciona la ventana. El usuario una vez que escribe el nombre y elije un archivo de imagen (con el Boton Examinar…) debe dar clic en el Boton Guardar; al hacer esto el programa realiza una pequeña validacion de campos vacios y si se logra satisfacer se hace el INSERT. Una vez que se realizo el INSERT el programa limpia los campos para que el usuario siga dando de alta mas productos. Si el usuario ya termino debe dar click en el Boton Cancelar para volver a la ventana principal del ejemplo.
Como se puede observar en el metodo altaProducto() se instancia a la clase CorregirRuta.java (pasandole la ruta sin corregir) y se ejecuta su metodo obtenerRutaCorregidaWindows() para obtener la ruta corregida, tambien en la clase interna seleccionarImagen se hace una instancia de la clase FiltroImagenes.java, a continuacion muestro el codigo de dichas clases:
CorregirRuta.java
Permite corregir al ruta de carpetas de un archivo para poder almacenarla correctamente en una tabla de MySQL. Creo que no necesita mucha explicacion pues en el cabezado del archivo se describe, sin tanto rodeo, el codigo es…
/* * Instituto Tecnologico de Zacatepec, Mor. * Descripcion: * Clase que eecibe una ruta de archivo y una cadena que es con la que vienen separadas los nombres de las carpetas * y otra cadena mas que es el nuevo separador con el que se van a separar ahora las carpetas. * Devuelve la ruta ya corregida con el nuevo separador * @author: Gonzalo Silverio gonzasilve@gmail.com * Archivo: CorregirRuta.java * */ import java.util.StringTokenizer; public class CorregirRuta { String ruta, separador, nuevoSeparador; public CorregirRuta(String laruta, String sep, String nuevoSep) { ruta=laruta; separador=sep; nuevoSeparador=nuevoSep; } public String obtenerRutaCorregidaWindows() { StringTokenizer tokens=new StringTokenizer(ruta, separador); //Para guardar la ruta corregida String rutaCorregida = new String(); //Contar los tokens (en este caso las carpetas, contado tambien // el nombre del archivo seleccionado). int noTokens = tokens.countTokens(); int i = 1; do { //Agregar el nuevo separador rutaCorregida += tokens.nextToken()+nuevoSeparador; i++; }while(i<noTokens); //Agregar a la ruta corregida el ultimo token, (nombre del archivo) rutaCorregida += tokens.nextToken(); //Mostrar la ruta corregida en la consola System.out.println(rutaCorregida+"\n"+noTokens+ " tokens"); return rutaCorregida; } }
FiltroImagenes.java
Clase para filtrar unicamente los archivos de imagenes con extension .jpeg , .jpg , .png , .gif en la ventana de dialogo estandar Abrir.
/* Instituto Tecnologico de Zacatepec, Mor. Descripcion: Clase que permite mostrar unicamente los ficheros .jpeg, .jpg, .gif en los cuadros de dialogo. Un filtro es un objeto de la clase FileFilter del paquete javax.swing.filechooser.. FileFilter es una clase obstracta con dos metodos abstractos accept y getDescription. Author: Gonzalo Silverio gonzasilve@gmail.com Archivo FiltroImagenes.java */ import javax.swing.filechooser.FileFilter; import java.io.File; public class FiltroImagenes extends FileFilter { public boolean accept(File f) { if( f.isDirectory() ) return true; String nombreArchivo = f.getName().toLowerCase(); if( nombreArchivo != null ) if( nombreArchivo.endsWith(".jpeg") || nombreArchivo.endsWith(".jpg") || nombreArchivo.endsWith(".png") || nombreArchivo.endsWith(".gif") ) return true; return false; } //Descripcion del filtro (se mostrara en la ventana abrir) public String getDescription() { return "Archivos de imagenes ( *.jpg , *.png , *.gif )"; } } //Fin de la clase
JfrVisorProductos.java
Esta clase crea una ventana muy sencilla para mostrar los datos del producto, principalmente permite leer la ruta almacenada del archivo de imagen muestra del producto. En el codigo he comentado las partes mas importantes…
/* Instituto Tecnologico de Zacatepec, Mor. Descripcion: Ventana para mostrar las imagenes de los productos. Autor: Gonzalo Silverio gonzasilve@gmail.com Archivo: JfrVisorProductos.java */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class JfrVisorProductos extends JFrame { JPanel panelPrincipal, panelSuperior,panelInferior; private static Connection con = null; Statement st; ResultSet rs; int idsProductos[]; //Contiene los ID de los productos //Apunta al registro que se esta mostrando actualmente //Po defecto apuntar antes del primero int regActual = -1; int totalRegistros = 0; //Contiene el total de registros que hay en la tabla JLabel lblNombreProducto = new JLabel("Nombre imagen"); JPanel panImagen; JLabel lblImagen; Icon imagenn; JButton btnAnterior = new JButton("Anterior"); JButton btnSiguiente = new JButton("Siguiente");; Box boxpanSuperior; JfrVisorProductos(String tituloVentana, int ancho, int alto) { //Establecer titulo,tamanio, si es redimensionable y la posicion // de la ventana setTitle(tituloVentana); setSize(ancho,alto); this.setResizable(false); setLocationRelativeTo(null); JPanel panNombreProducto = new JPanel(new FlowLayout(FlowLayout.CENTER)); panNombreProducto.add(lblNombreProducto); panelPrincipal = new JPanel(new BorderLayout()); panelSuperior = new JPanel(new BorderLayout()); panelInferior = new JPanel(new BorderLayout()); btnAnterior.setMnemonic(KeyEvent.VK_A); btnSiguiente.setMnemonic(KeyEvent.VK_S); imagenn = new ImageIcon(); lblImagen = new JLabel(imagenn); panImagen = new JPanel(new FlowLayout(FlowLayout.CENTER)); panImagen.add(new JScrollPane(lblImagen), BorderLayout.CENTER); panelSuperior.add(panImagen); boxpanSuperior = Box.createVerticalBox(); boxpanSuperior.add(panNombreProducto); boxpanSuperior.add(panelSuperior); panelInferior.add(btnAnterior, BorderLayout.WEST); panelInferior.add(btnSiguiente, BorderLayout.EAST); panelPrincipal.add(boxpanSuperior, BorderLayout.CENTER); panelPrincipal.add(panelInferior, BorderLayout.SOUTH); add(panelPrincipal); inicializar(); //Cargar los IDs siguiente(); //Moverse al primer registro (estabamos uno antes del primero) // ##################### ESCUCHADOR DE VENTANA ############################################# //Para que al dar clic en la x de la esquina de este JFrame //se muestre por default la ventana principal this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { JfrPrincipal ejemplo = new JfrPrincipal("Visor de Imagenes de productos",400,400); ejemplo.mostrar(); setVisible(false); } public void windowClosed(WindowEvent e) { JfrPrincipal ejemplo = new JfrPrincipal("Visor de Imagenes de productos",400,400); ejemplo.mostrar(); setVisible(false); } }); // ########### ESCUCHADOR BOTON ANTERIOR ########## ActionListener escuchadorAnterior = new ActionListener() { public void actionPerformed(ActionEvent evt) { anterior(); //Va al anterior registro de la tabla } }; btnAnterior.addActionListener(escuchadorAnterior); // ########### ESCUCHADOR BOTON SIGUIENTE ########## ActionListener escuchadorSiguiente = new ActionListener() { public void actionPerformed(ActionEvent evt) { siguiente(); //Va al siguiente registro de la tabla } }; btnSiguiente.addActionListener(escuchadorSiguiente); } //Fin del constructor //Inicializa el arreglo de IDs para que se puedan recorrer los registros //y actualiza la variable que contiene el total de registros que hay en la tabla public void inicializar() { try { conectarBaseDatos(); //Nos conectamos con la BD rs = st.executeQuery("SELECT * FROM productos"); //seleccionamos todos los de la tabla productos //A continuacion se van a guardar en un arreglo los IDs de todos los productos if(! rs.first() ) //Nos movemos al primer registro JOptionPane.showMessageDialog(null,"La tabla de productos esta vacia."); int contador = 0 ; do contador ++ ; //Contar cuantos registros hay en la tabla productos while(rs.next()); totalRegistros = contador-1; //Guarda el numero de registros que hay en la tabla idsProductos = new int[contador]; //Crea el arreglo de IDs contador = 0; //Reinicializar el contador rs.first(); //Nos movemos al primer registro do idsProductos[contador++]= rs.getInt("id"); while(rs.next()); } catch( SQLException sqlex ) { JOptionPane.showMessageDialog(null,"Error al inicializar el arreglo de IDs"); } } //Fin del metodo //permite desplazarse al anterior registro de la tabla public void anterior() { regActual = regActual - 1; if ( regActual < 0 ) regActual = 0; if(!consultarID()) JOptionPane.showMessageDialog(null,"Error al ir al registro Anterior"); } //permite desplazarse al siguiente registro de la tabla public void siguiente() { regActual = regActual + 1; if ( regActual > totalRegistros ) regActual = totalRegistros; if(!consultarID()) JOptionPane.showMessageDialog(null,"Error al ir al siguiente registro"); } //Realiza una consulta con el ID seleccionado en regActual en el arreglo idsProductos[], //devuelve true si se realizo la consulta con exito, en caso contrario devuelve false private boolean consultarID() { try { rs = st.executeQuery("SELECT * FROM productos where id="+idsProductos[regActual] ); //seleccionamos todos los de la tabla productos rs.first(); //moverse al primer registro poblarCampos(); return true; //Todo se ejecuto con exito } catch(SQLException sqlex) { return false; } } //Fin del metodo //rellena los campos con los datos del registro apuntado actualmente private void poblarCampos() { try { lblNombreProducto.setText(rs.getString("nombre")); panImagen.remove(lblImagen); //Borrar la imagen anterior //Recuperar de la BD la ruta del archivo de imagen imagenn = new ImageIcon(rs.getString("imagen")); lblImagen = new JLabel(imagenn); //Cargar nueva imagen panImagen.add(lblImagen); validate(); repaint(); //Mostrar en la barra de titulo el reg. actual y el total setTitle("Visor de imagenes [producto "+(regActual+1)+" de "+(totalRegistros+1)+"]"); } catch( SQLException sqlex ) { JOptionPane.showMessageDialog(null,"Error al rellenar los campos"); } } //Fin del metodo //Conecta la base de datos y se prepara para un sentencia SQL //Devuelve true solo si la conexion tuvo exito public boolean conectarBaseDatos() { try { Class.forName("com.mysql.jdbc.Driver"); String strCadenaConexion = "jdbc:mysql://localhost/pruebaRuta"; con = DriverManager.getConnection(strCadenaConexion,"root","12345"); if (con == null ) return false; st = con.createStatement(); return true; } catch(SQLException sqlex) { sqlex.printStackTrace(); return false; } catch(Exception e) { e.printStackTrace(); return false; } } //Fin del metodo //hacer visible la ventana public void mostrar() { setVisible(true); } } //Fin de la clase
El aspecto de la ventana que se genera es esta:
Como se puede observar en el codigo e ideado una manera de recorrrer los registros de la tabla con dos botones, me parece interesante esto; lo mas probable es que en otra entrada del blog publique algo al respecto pero ya con los 4 botones de navegacion de registros (Primero,Anterior,Siguiente,Ultimo).
Nota: La marca Sabritas, Rufles y Coca-Cola son marcas registradas y solo las e puesto aqui con propositos educativos, si el autor(es) desea que la retire basta con pedirlo.
Bueno esto creo que se alargo demasiado, el objetivo era corregir la ruta y meti varias cosas mas, jajaja pero estoy seguro que aprendi mas y espero que tu tambien. Si estas leyendo esto es por que me imagino que leiste todo lo anterior. Ya sabes si tienes dudas puedes dejar un comentario, o si quieres los .java basta con dejar tu mail… hasta pronto y gracias por pasar por aqui ;).
Pingback: car ecu tuning
Pingback: download Game slot Uang asli
Pingback: Attraction marketing seminars
Pingback: luggage sets cheap
Pingback: electriq tv software update
Pingback: Continued
Pingback: visit their website
Pingback: mouse click the next page
Pingback: drawing tablets that don t need a computer
Pingback: building toys for 6 year olds
Pingback: jetset travel tote
Pingback: visit Arcelia
Pingback: chanel flap bag with handle
Pingback: digital caliper reviews
Pingback: michael kors travel tote