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

Eliminar fila de una base de datos

Estas en el tema de Eliminar fila de una base de datos en el foro de Java en Foros del Web. Saludos. Estoy haciendo una aplicacion que elimine un usuario a una base de datos, de un arrayList y al mismo tiempo del JFrame. Los datos ...
  #1 (permalink)  
Antiguo 21/07/2011, 17:40
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Eliminar fila de una base de datos

Saludos.

Estoy haciendo una aplicacion que elimine un usuario a una base de datos, de un arrayList y al mismo tiempo del JFrame. Los datos se insertan bien pero cuando le voy a eliminar, me dice que el nombre de la columna no es valido, y me trae el nombre del usuario, que invoco en el metodo. El error que me da es el siguiente:

Cita:
com.microsoft.sqlserver.jdbc.SQLServerException: El nombre de columna 'Z' no es válido.
Este es el codigo:

Código Java:
Ver original
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.sql.Statement;
  6. import java.util.ArrayList;
  7. import javax.swing.JFrame;
  8.  
  9. public class Conexion {
  10.  
  11.     Connection con;
  12.     Statement stmt;
  13.     ResultSet rs;
  14.    
  15.     public Conexion(){
  16.        
  17.         try {
  18. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
  19.             con = DriverManager.getConnection( "jdbc:sqlserver://localhost;databaseName=Eventos;user=Sterling;password=123456" );
  20.             stmt = con.createStatement();
  21.         } catch (InstantiationException e) {
  22.             e.printStackTrace();
  23.         } catch (IllegalAccessException e) {
  24.             e.printStackTrace();
  25.         } catch (ClassNotFoundException e) {
  26.             e.printStackTrace();
  27.         } catch (SQLException e) {
  28.             e.printStackTrace();
  29.         }
  30.     }
  31.    
  32.     public void listarUsuario(){
  33.         try {
  34.             rs = stmt.executeQuery( "select * from Usuarios order by Usuario ");
  35.             while ( rs.next() ){
  36.                 System.out.println(
  37.                         rs.getString("Nombre")      + "\t" +
  38.                         rs.getString("Apellido")    + "\t" +
  39.                         rs.getString("Usuario")     + "\t" +
  40.                         rs.getString("Contraseña")  + "\t" +
  41.                         rs.getString("Perfil")
  42.                 );
  43.             }
  44.         } catch (SQLException e) {
  45.             // TODO Auto-generated catch block
  46.             e.printStackTrace();
  47.         }
  48.     }
  49.    
  50.     public ArrayList<Usuario> getUsuario(){
  51.         ArrayList<Usuario> usuarios = null;
  52.         try {
  53.             rs = stmt.executeQuery("select * from Usuarios order by Usuario ");
  54.             usuarios = new ArrayList<Usuario>();
  55.             while ( rs.next() ){
  56.                 usuarios.add( new Usuario( rs.getString("Nombre"), rs.getString("Apellido"), rs.getString("Usuario"), rs.getString("Contraseña"), rs.getString("Perfil")  ) );
  57.             }
  58.         } catch (SQLException e) {
  59.             // TODO Auto-generated catch block
  60.             e.printStackTrace();
  61.         }
  62.         return usuarios;
  63.     }
  64.    
  65.     public void insertarUsuario(Usuario usuario){
  66.         try {
  67.             stmt.execute("insert into Usuarios(Nombre, Apellido, Usuario, Contraseña, Perfil) values (     '"+ usuario.getNombre() +"', '"+ usuario.getApellido() +"', '" + usuario.getUsuario() +"', '"+ usuario.getContraseña() +"', '"+ usuario.getPerfil() +"') ");
  68.         } catch (SQLException e) {
  69.            
  70.             System.out.println("No se puede insertar valor repetido");
  71.             e.printStackTrace();
  72.         }
  73.     }
  74.    
  75.     public void eliminarUsuario( Usuario usuarios ){
  76.         try {
  77.             [SIZE="5"]stmt.execute(" delete from Usuarios where Usuario = " + usuarios.getUsuario() );[/SIZE]
  78.            
  79.         } catch (SQLException e) {
  80.             // TODO Auto-generated catch block
  81.             e.printStackTrace();
  82.         }
  83.     }
  84.    
  85.     public static void main(String[] args) {
  86.         Conexion conecta = new Conexion();
  87.         conecta.listarUsuario();
  88.     }
  89. }

Y aqui está el query que elimina el usuario:

Código Java:
Ver original
  1. import java.util.ArrayList;
  2. import javax.swing.table.AbstractTableModel;
  3.  
  4. public class Modelo extends AbstractTableModel {
  5.  
  6.     ArrayList<Usuario> usuarios;
  7.     Conexion con;
  8.    
  9.     Modelo(){
  10.         con = new Conexion();
  11.         usuarios = con.getUsuario();
  12.     }
  13.    
  14.     [SIZE="5"]public void eliminar(int fila){
  15.         con.eliminarUsuario(usuarios.get(fila));
  16.         usuarios.remove(fila);
  17.         fireTableRowsDeleted(fila, fila);
  18.     }[/SIZE]
  19.    
  20.     String [] encabezado = {"Nombre", "Apellido", "Usuario", "Contraseña", "Perfil"};
  21.     public int getColumnCount() {
  22.         return encabezado.length;
  23.     }
  24.    
  25.     public int getRowCount() {     
  26.         return usuarios.size();
  27.     }
  28.    
  29.     public String getColumnName(int x) {
  30.         return encabezado[x];
  31.     }
  32.    
  33.     public void añadir(Usuario usuario){
  34.         con.insertarUsuario(usuario);
  35.         usuarios = con.getUsuario();
  36.         fireTableDataChanged();
  37.  
  38.     }
  39.     public Object getValueAt(int x, int y) {
  40.         String retorno = "";
  41.         Usuario usuario = usuarios.get(x);
  42.        
  43.         switch (y){
  44.         case 0: retorno = usuario.getNombre();
  45.         break;
  46.         case 1: retorno = usuario.getApellido();
  47.         break;
  48.         case 2: retorno = usuario.getUsuario();
  49.         break;
  50.         case 3: retorno = usuario.getContraseña();
  51.         break;
  52.         case 4: retorno = usuario.getPerfil();
  53.         }
  54.         return retorno;
  55.     }
  56. }

Gracias por cualquier ayuda que me puedan brindar.
Si alguno quisiera probar la aplicacion, les dejo las otras 2 clases.

Código Java:
Ver original
  1. package mantenimiento;
  2.  
  3. public class Usuario {
  4.  
  5.     private String Nombre;
  6.     private String Apellido;
  7.     private String Usuario;
  8.     private String Contraseña;
  9.     private String Perfil;
  10.  
  11.     public String getNombre() {
  12.         return Nombre;
  13.     }
  14.     public void setNombre(String nombre) {
  15.         Nombre = nombre;
  16.     }
  17.     public String getApellido() {
  18.         return Apellido;
  19.     }
  20.     public void setApellido(String apellido) {
  21.         Apellido = apellido;
  22.     }
  23.     public String getUsuario() {
  24.         return Usuario;
  25.     }
  26.     public void setUsuario(String usuario) {
  27.         Usuario = usuario;
  28.     }
  29.     public String getContraseña() {
  30.         return Contraseña;
  31.     }
  32.     public void setContraseña(String contraseña) {
  33.         Contraseña = contraseña;
  34.     }
  35.     public String getPerfil() {
  36.         return Perfil;
  37.     }
  38.     public void setPerfil(String perfil) {
  39.         Perfil = perfil;
  40.     }
  41.  
  42.     public Usuario(String nombre, String apellido, String usuario,
  43.             String contraseña, String perfil) {
  44.         super();
  45.         Nombre = nombre;
  46.         Apellido = apellido;
  47.         Usuario = usuario;
  48.         Contraseña = contraseña;
  49.         Perfil = perfil;
  50.     }
  51. }
  #2 (permalink)  
Antiguo 21/07/2011, 17:41
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Eliminar fila de una base de datos

Esta es la parte visual.

Código Java:
Ver original
  1. package mantenimiento;
  2.  
  3. import java.awt.BorderLayout;
  4. import javax.swing.JPanel;
  5. import javax.swing.JFrame;
  6. import java.awt.Dimension;
  7. import javax.swing.JScrollPane;
  8. import java.awt.Rectangle;
  9. import javax.swing.JTable;
  10. import javax.swing.JTextField;
  11. import javax.swing.JLabel;
  12. import javax.swing.JButton;
  13.  
  14. public class FrameUsuario extends JFrame {
  15.     private static final long serialVersionUID = 1L;
  16.     private JPanel jContentPane = null;
  17.     private JScrollPane jScrollPane = null;
  18.     private JTable jTableUsuario = null;
  19.     private Modelo modelo = null;
  20.     private JTextField txtNombre = null;
  21.     private JTextField txtApellido = null;
  22.     private JLabel lblNombre = null;
  23.     private JLabel lblApellido = null;
  24.     private JButton btAñadir = null;
  25.     private JLabel lblUsuario = null;
  26.     private JLabel lblContraseña = null;
  27.     private JLabel lblPerfil = null;
  28.     private JTextField txtUsuario = null;
  29.     private JTextField txtContraseña = null;
  30.     private JTextField txtPerfil = null;
  31.     private JButton btEliminar = null;
  32.  
  33.     public FrameUsuario() {
  34.         super();
  35.         initialize();      
  36.     }
  37.  
  38.     private void initialize() {
  39.         modelo = new Modelo();
  40.         this.setSize(691, 470);
  41.         this.setContentPane(getJContentPane());
  42.         this.setTitle("Listado de Usuarios");
  43.     }
  44.  
  45.     private JPanel getJContentPane() {
  46.         if (jContentPane == null) {
  47.             lblPerfil = new JLabel();
  48.             lblPerfil.setBounds(new Rectangle(269, 82, 113, 32));
  49.             lblPerfil.setText("Perfil");
  50.             lblContraseña = new JLabel();
  51.             lblContraseña.setBounds(new Rectangle(269, 29, 113, 32));
  52.             lblContraseña.setText("Contraseña");
  53.             lblUsuario = new JLabel();
  54.             lblUsuario.setBounds(new Rectangle(31, 135, 113, 32));
  55.             lblUsuario.setText("Usuario");
  56.             lblApellido = new JLabel();
  57.             lblApellido.setBounds(new Rectangle(31, 82, 113, 32));
  58.             lblApellido.setText("Apellido");
  59.             lblNombre = new JLabel();
  60.             lblNombre.setBounds(new Rectangle(31, 29, 113, 32));
  61.             lblNombre.setText("Nombre");
  62.             jContentPane = new JPanel();
  63.             jContentPane.setLayout(null);
  64.             jContentPane.add(getJScrollPane(), null);
  65.             jContentPane.add(getTxtNombre(), null);
  66.             jContentPane.add(getTxtApellido(), null);
  67.             jContentPane.add(lblNombre, null);
  68.             jContentPane.add(lblApellido, null);
  69.             jContentPane.add(getBtAñadir(), null);
  70.             jContentPane.add(lblUsuario, null);
  71.             jContentPane.add(lblContraseña, null);
  72.             jContentPane.add(lblPerfil, null);
  73.             jContentPane.add(getTxtUsuario(), null);
  74.             jContentPane.add(getTxtContraseña(), null);
  75.             jContentPane.add(getTxtPerfil(), null);
  76.             jContentPane.add(getBtEliminar(), null);
  77.         }
  78.         return jContentPane;
  79.     }
  80.  
  81.     private JScrollPane getJScrollPane() {
  82.         if (jScrollPane == null) {
  83.             jScrollPane = new JScrollPane();
  84.             jScrollPane.setBounds(new Rectangle(29, 181, 614, 238));
  85.             jScrollPane.setViewportView(getJTableUsuario());
  86.         }
  87.         return jScrollPane;
  88.     }
  89.  
  90.     private JTable getJTableUsuario() {
  91.         if (jTableUsuario == null) {
  92.             jTableUsuario = new JTable();
  93.             jTableUsuario.setModel(modelo);
  94.         }
  95.         return jTableUsuario;
  96.     }
  97.  
  98.     private JTextField getTxtNombre() {
  99.         if (txtNombre == null) {
  100.             txtNombre = new JTextField();
  101.             txtNombre.setBounds(new Rectangle(149, 29, 113, 32));
  102.         }
  103.         return txtNombre;
  104.     }
  105.  
  106.     private JTextField getTxtApellido() {
  107.         if (txtApellido == null) {
  108.             txtApellido = new JTextField();
  109.             txtApellido.setBounds(new Rectangle(149, 82, 113, 32));
  110.         }
  111.         return txtApellido;
  112.     }
  113.  
  114.     private JButton getBtAñadir() {
  115.         if (btAñadir == null) {
  116.             btAñadir = new JButton();
  117.             btAñadir.setBounds(new Rectangle(513, 29, 113, 36));
  118.             btAñadir.setText("Añadir");
  119.             btAñadir.addActionListener(new java.awt.event.ActionListener() {
  120.                 public void actionPerformed(java.awt.event.ActionEvent e) {
  121.                     //Insercion de los datos
  122.                     modelo.añadir(new Usuario(txtNombre.getText(), txtApellido.getText(), txtUsuario.getText(), txtContraseña.getText(), txtPerfil.getText()));
  123.                     //Limpiado de los fields
  124.                     txtNombre.setText("");
  125.                     txtApellido.setText("");
  126.                     txtUsuario.setText("");
  127.                     txtContraseña.setText("");
  128.                     txtPerfil.setText("");
  129.                 }
  130.             }
  131.             );
  132.         }
  133.         return btAñadir;
  134.     }
  135.  
  136.     private JTextField getTxtUsuario() {
  137.         if (txtUsuario == null) {
  138.             txtUsuario = new JTextField();
  139.             txtUsuario.setBounds(new Rectangle(151, 135, 113, 32));
  140.         }
  141.         return txtUsuario;
  142.     }
  143.  
  144.     private JTextField getTxtContraseña() {
  145.         if (txtContraseña == null) {
  146.             txtContraseña = new JTextField();
  147.             txtContraseña.setBounds(new Rectangle(390, 29, 113, 32));
  148.         }
  149.         return txtContraseña;
  150.     }
  151.  
  152.     private JTextField getTxtPerfil() {
  153.         if (txtPerfil == null) {
  154.             txtPerfil = new JTextField();
  155.             txtPerfil.setBounds(new Rectangle(390, 82, 113, 32));
  156.         }
  157.         return txtPerfil;
  158.     }
  159.  
  160.     private JButton getBtEliminar() {
  161.         if (btEliminar == null) {
  162.             btEliminar = new JButton();
  163.             btEliminar.setBounds(new Rectangle(512, 80, 115, 36));
  164.             btEliminar.setText("Eliminar");
  165.             btEliminar.addActionListener(new java.awt.event.ActionListener() {
  166.                 public void actionPerformed(java.awt.event.ActionEvent e) {
  167.                     modelo.eliminar(jTableUsuario.getSelectedRow());
  168.                 }
  169.             });
  170.         }
  171.         return btEliminar;
  172.     }
  173.  
  174. }  //  @jve:decl-index=0:visual-constraint="10,10"
  #3 (permalink)  
Antiguo 21/07/2011, 20:25
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Eliminar fila de una base de datos

Hola,

En este caso, cuando estas ingresando los datos, estás poniendo comillas simples para denotar en la instrucción SQL que los valores son constantes alfanúmericas:
Cita:
Iniciado por sterlingdiazd Ver Mensaje
Código Java:
Ver original
  1. stmt.execute("insert into Usuarios(Nombre, Apellido, Usuario, Contraseña, Perfil) values
  2. (     '"+ usuario.getNombre() +"', '"+ usuario.getApellido() +"', '" + usuario.getUsuario() +
  3. "', '"+ usuario.getContraseña() +"', '"+ usuario.getPerfil() +"') ");
Pero acá no lo estás haciendo, aún cuando deben ser constantes alfanuméricas.
Cita:
Iniciado por sterlingdiazd Ver Mensaje
Código Java:
Ver original
  1. stmt.execute(" delete from Usuarios where Usuario = " + usuarios.getUsuario() );

En este caso yo te aconsejaría que en lugar de 'intentar' mantener sincronizada la base de datos con tu lista, realices una nueva consulta que traiga 'todos' los datos cada vez que insertas, eliminas o actualizas un registro, no solo es más facil darle mantinimiento a una aplicación sino que eliminas varios problemas.

Suponiendo que la cantidad de usuarios es un valor moderadamente pequeño, sino fuera así, es decir, si fueran cientos o miles de usuarios tampoco es aconsejable que los metas en un List todos al mismo tiempo, entonces tendrías que desarrollar una interface gráfica (una pantalla) donde la lógica sea mas eficiente.
Cita:
Iniciado por sterlingdiazd Ver Mensaje
Código Java:
Ver original
  1. public void eliminar(int fila){
  2.         con.eliminarUsuario(usuarios.get(fila));
  3.         // usuarios.remove(fila);
  4.         Volver a cargar todos los usuarios.
  5.         fireTableDataChanged();
  6.         // fireTableRowsDeleted(fila, fila);
  7.     }
Aunque lograste un concepto bastante definido, donde desacoplaste la capa de acceso a datos claramente, tus entidades, etc., creo, en mi opinión personal, que la parte gráfica se podría mejorar bastante, principalmente usando un Layout.

Saludos,
  #4 (permalink)  
Antiguo 21/07/2011, 21:45
Avatar de leocente  
Fecha de Ingreso: diciembre-2009
Mensajes: 62
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: Eliminar fila de una base de datos

Proba cambiando esta linea que tenes

Código Javascript:
Ver original
  1. stmt.execute(" delete from Usuarios where Usuario = " + usuarios.getUsuario() );

por esta

Código Javascript:
Ver original
  1. stmt.execute(" delete from Usuarios where Usuario = '"+usuarios.getUsuario()+"'");

y fijate si es eso.

Lo demas no tengo tiempo para verlo, disculpa. Pero creo que lo que te marque es el problema. Sino avisa!


Saludos maquina!
  #5 (permalink)  
Antiguo 22/07/2011, 08:53
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Eliminar fila de una base de datos

Gracias, mil Gracias! El problema se soluciono.

Etiquetas: database
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 01:55.