Foros del Web » Programación para mayores de 30 ;) » Java »

Conectar con base de datos y mostrar registros

Estas en el tema de Conectar con base de datos y mostrar registros en el foro de Java en Foros del Web. ¡Hola! Verán, estoy haciendo un sistema de ventas para un restaurante, y ya hice la conexión a la base de datos (en en MS Access) ...
  #1 (permalink)  
Antiguo 27/07/2015, 18:24
Avatar de OPMUANRK  
Fecha de Ingreso: diciembre-2014
Mensajes: 52
Antigüedad: 9 años, 4 meses
Puntos: 1
Pregunta Conectar con base de datos y mostrar registros

¡Hola!
Verán, estoy haciendo un sistema de ventas para un restaurante, y ya hice la conexión a la base de datos (en en MS Access) y eso, pero no me queda algo muy en claro, quiero que los datos de mi base, (La base contiene una sola tabla donde vienen cuatro columnas: ID, Categoría, Platillo y Precio) se muestren en un JList, en respecto a las categorías, y que cuando le des clic a la categoría en la JList, se muestren los platillos de esa categoría en una tabla, para poder agregarlos a otra tabla donde se muestre el platillo agregado, así se ve por mientras:


Quiero que de la izquierda se pase a la derecha y así, como se muestra "detalladamente" en la imagen xD

Pero no tengo ni idea cómo hacerlo, no suelo trabajar con JAVA, y lo que llevo es esto:

CONEXION.java:
Código:
package sistema;
import java.sql.*;
import javax.swing.JOptionPane;
public class conexion {
    private Connection con = null;
    public Connection conexion(){
        try{
            Class.forName("sun.jdbc.odbc.JdbcDriver");
            con = DriverManager.getConnection("jdbc:odbc:menu","admin","12345");
        }
        catch (ClassNotFoundException | SQLException e){
            JOptionPane.showMessageDialog(null,"No se ha podido conectar a la base","Error",JOptionPane.ERROR_MESSAGE);            
        }
        return con;
    }
    public void CerrarConexion(Connection con){
        try{
            con.close();
        }
        catch(SQLException e){
            
        }
    }
}
SQL.java
Código:
package sistema;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;        
public class Sql {
    conexion n = new conexion();
    Connection conect = null;
    Statement st = null;
    ResultSet rs = null;
    String query;
     
    public void guardar(String tabla, String campo, String valores){
        query="insert into "+tabla+" ("+campo+") values("+valores+") ";
        conect= n.conexion();
        try {
            st=conect.createStatement();
            st.executeUpdate(query);
            JOptionPane.showMessageDialog(null,"Guardado exitosamente","Listo",JOptionPane.OK_OPTION);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Error SQL"+ex);
        }       
    }
}
Ojalá uno de ustedes me pudiera ayudar, gracias :)
  #2 (permalink)  
Antiguo 28/07/2015, 11:55
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 1 mes
Puntos: 2
Respuesta: Conectar con base de datos y mostrar registros

Esta clase representa tu tabla categoría:

Código Java:
Ver original
  1. public class Category {
  2.    
  3.     private long id;
  4.     private String name;
  5.     private List<Meal> meals;
  6.  
  7.     // constructores, getters y setters
  8. }

Esta tabla representa a tu tabla platillo:

Código Java:
Ver original
  1. public class Meal {
  2.  
  3.     private long id;
  4.     private String name;
  5.     private float price;
  6.  
  7.     // constructores, getters y setters
  8.  
  9. }

Esta es una capa de abstracción, es un DAO (Data Access Object - objeto de acceso a datos) que se usa para separar lógica de modelo del resto de la aplicación.

Código Java:
Ver original
  1. public interface RestauranteDao {
  2.    
  3.     public List<Category> getAllCategories() {
  4.         List<Category> categories = new ArrayList<>();
  5.         String sql = "SELECT * FROM categories";
  6.  
  7.         try (Connection con = Connection.getConnection();
  8.                  Statement st = con.createStatement(sql)) {
  9.  
  10.             // hace la consulta
  11.             ResultSet rs = con.executeQuery();
  12.  
  13.             while(rs.next()) {
  14.                 Category category = new Category();
  15.                 category.setId(rs.getInt("id"));
  16.                 category.setName(rs.getString("name");
  17.                 categories.add(category);
  18.             }
  19.         } catch(SQLException e) {
  20.                 // hacer algo con la excepcion
  21.         }
  22.  
  23.         return categories;
  24.     }
  25.  
  26.     public List<Meal> getMealsByCategory(int categoryId) {
  27.         List<Meal> meals = new ArrayList<>();
  28.         String sql = "SELECT * FROM meals WHERE category_id = ?";
  29.  
  30.         try (Connection con = Connection.getConnection();
  31.                  PrepareStatement pst = con.prepareStatement(sql)) {
  32.  
  33.             // bindea los datos a la consulta
  34.             pst.setInt(1, categoryId);
  35.             // hace la consulta
  36.             ResultSet rs = con.executeQuery();
  37.  
  38.             while(rs.next()) {
  39.                 Meal meal = new Meal();
  40.                 meal.setId(rs.getInt("id"));
  41.                 meal.setName(rs.getString("name"));
  42.                 meal.setName(rs.getFloat("price"));
  43.                 meals.add(meal);
  44.             }
  45.         } catch(SQLException e) {
  46.                 // hacer algo con la excepcion
  47.         }
  48.  
  49.         return meals;
  50.     }
  51.  
  52.     public List<Meal> getMealsByCategoryName(String categoryName) {
  53.         List<Meal> meals = new ArrayList<>();
  54.         String sql = "SELECT Id FROM category WHERE name = ?";
  55.  
  56.         try (Connection con = Connection.getConnection();
  57.                  PrepareStatement pst = con.prepareStatement(sql)) {
  58.            
  59.             // id de la categoria
  60.             int categoryId;
  61.             // bindea los datos a la consulta
  62.             pst.setString(1, categoryName);
  63.             // hace la consulta
  64.             ResultSet rs = con.executeQuery();
  65.  
  66.             while(rs.next()) {
  67.                 categoryId = rs.getInt("id");
  68.             }
  69.  
  70.             meals = this.getMealsByCategoryId(categoryId);
  71.         } catch(SQLException e) {
  72.                 // hacer algo con la excepcion
  73.         }
  74.  
  75.         return meals;
  76.     }
  77.  
  78. }

Y aquí utilizamos lo anterior:

Código Java:
Ver original
  1. listCategories.addSelectionListener(new ListSelectionListener() {
  2.  
  3.     @Override
  4.     public void valueChanged(ListSelectionEvent e) {
  5.         if(!e.getValueIsAdjusting()) {
  6.             RestaurantDao dao = new RestaurantDao();
  7.             // jlist origen del evento
  8.             JList target = (JList) e.getSource();
  9.             // index seleccionado en la lista
  10.             int indexSelected = target.getSelectedIndex();
  11.             // obtiene el listmodel y obtiene el objeto Category por index
  12.             Category category = target.getSelectionModel().get(indexSelected);
  13.             // obtiene la lista de platillos de acuerdo a la categoria
  14.             List<Meal> meals = dao.getMealsByCategory(category.getId());
  15.            
  16.             // lo pasas a la tabla...
  17.         }
  18.     }
  19. });

Una vez que ya tienes los platillos, pasarlos al JTable no tiene mayor misterio. Si tienes una duda con eso, la comentas.

PD: Agrega al JList un ListModel, así trabajas siempre con objetos:

Código Java:
Ver original
  1. RestaurantDao dao = new RestaurantDao();
  2. List<Category> categories = dao.getAllCategories();
  3. ListModel<Category> model = new DefaultListModel<>();
  4.  
  5. for(Category category : categories) {
  6.     model.addElement(model);
  7. }
  8.  
  9. JList listCategories = new JList(model);
  #3 (permalink)  
Antiguo 28/07/2015, 18:36
Avatar de OPMUANRK  
Fecha de Ingreso: diciembre-2014
Mensajes: 52
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: Conectar con base de datos y mostrar registros

Primero que nada, ¡Gracias GusGarsaky! por interesarte y ayudarme en esto, tengo una pregunta, ¿El código es para hacerlo con Access o con un servidor local?

Estoy trabajando con una tabla en Access y ya tengo la base de datos hecha, gracias de antemano :)
  #4 (permalink)  
Antiguo 29/07/2015, 07:39
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 1 mes
Puntos: 2
Respuesta: Conectar con base de datos y mostrar registros

No tiene que ver un servidor local con access. Sigue utilizando tu clase conexion para obtener tu conexión.

PD: Las clases SIEMPRE empiezan con mayúscula.
  #5 (permalink)  
Antiguo 29/07/2015, 12:10
Avatar de OPMUANRK  
Fecha de Ingreso: diciembre-2014
Mensajes: 52
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: Conectar con base de datos y mostrar registros

Ya, gracias Gus :)

Etiquetas: netbeans
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:34.