Autor Tema: Vaciar contenido de JTextField en base de datos usando sql en java  (Leído 11653 veces)

cardiobeta

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 39
    • Ver Perfil
Hola a todos. Tengo el siguiente codigo:

Código: [Seleccionar]
public void guardar() throws SQLException{
    Connection conn = null;
    Statement  st = null;
    String   sql = null;
    ResultSet rst1 = null;
   
   
    try {
        Class.forName("org.hsqldb.jdbcDriver" );
    } catch (Exception e) {
        System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
        e.printStackTrace();
        return;
    }

   
   
    try {
   
    conn = DriverManager.getConnection("jdbc:hsqldb:file:/media/11EF-1495/bladimir/Pacientes", "root", "1234");
    st  = conn.createStatement();       
    String a = jTextField1.getText().toString();
    String b = jTextField2.getText().toString();
    String c = jTextField3.getText().toString();
    String d = jTextField4.getText().toString();
    String e = jTextField5.getText().toString();
    String f = jTextField6.getText().toString();
    st.executeUpdate("INSERT INTO pacientes (nombre, ci, fechanac, ingreso, ultima, proxima) VALUES ("jTextField1.getText().toString()", "jTextField2.getText().toString()", "jTextField3.getText().toString()", "jTextField4.getText().toString()", "jTextField5.getText().toString()",  "jTextField6.getText().toString()")");
         
         rst1.close();   
      st.executeUpdate("SHUTDOWN");
      st.close();
      conn.close();
     
    } catch (Exception ex){

return;
     }
      jTextField1.setText("");
      jTextField1.setEditable(false);
      jTextField2.setText("");
      jTextField2.setEditable(false);
      jTextField3.setText("");
      jTextField3.setEditable(false);
      jTextField4.setText("");
      jTextField4.setEditable(false);
      jTextField4.setText("");
      jTextField5.setEditable(false);
      jTextField5.setText("");
      jTextField6.setEditable(false);
      jTextField6.setText("");
     
   }


El asunto es que no doy con la construccion adecuada de la sentencia sql para insertar el contenido de los jTexField en los respectivos campos de la base de datos. Gracias de antemano.
« Última modificación: 20 de Septiembre 2014, 18:44 por Alex Rodríguez »

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
Re:Vaciar contenido de JTextField en base de datos usando sql en java
« Respuesta #1 en: 07 de Noviembre 2012, 20:42 »
No estoy seguro porque esto habría que probarlo compilando código, pero me resulta un poco extraña esta parte del código:

String a = jTextField1.getText().toString();
       String b = jTextField2.getText().toString();
       String c = jTextField3.getText().toString();
       String d = jTextField4.getText().toString();
       String e = jTextField5.getText().toString();
       String f = jTextField6.getText().toString();
       st.executeUpdate("INSERT INTO pacientes (nombre, ci, fechanac, ingreso, ultima, proxima) VALUES ("jTextField1.getText().toString()", "jTextField2.getText().toString()", "jTextField3.getText().toString()", "jTextField4.getText().toString()", "jTextField5.getText().toString()",  "jTextField6.getText().toString()")");   



Al método executeUpdate le probaría a pasar esto:

st.executeUpdate("INSERT INTO pacientes (nombre, ci, fechanac, ingreso, ultima, proxima) VALUES ('"+jTextField1.getText().toString()+"', '"+jTextField2.getText().toString()+"', '"+jTextField3.getText().toString()+"', '"jTextField4.getText().toString()+"', '"+jTextField5.getText().toString()+"',  '"jTextField6.getText().toString()+"')");

Cada campo a insertar, entre apóstrofes, y cada string entre comillas; para que interprete la invocación del método bien como un string, precederlo y ponerle después el símbolo +. Puedes probar a ver si va.

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
Re:Vaciar contenido de JTextField en base de datos usando sql en java
« Respuesta #2 en: 07 de Noviembre 2012, 20:54 »
Aunque quizás sea más limpio y adecuado usar preparedStatement. Sería algo así:

try {

PreparedStatement preparedStatement = conn.prepareStatement("INSERT INTO pacientes (nombre, ci, fechanac, ingreso, ultima, proxima) VALUES (?, ?, ?, ?, ?,  ?)");

//Preparamos aprovechando que en a, b, c, d, e, f tenemos los strings a insertar
preparedStatement.setString(1, a);
preparedStatement.setString(2, b);
preparedStatement.setString(3, c);
preparedStatement.setString(4, d);
preparedStatement.setString(5, e);
preparedStatement.setString(6, f);

preparedStatement.executeUpdate(); //Ejecutamos

} catch (SQLException e) {
     System.out.println("Error de MySQL: " + e.getMessage());
   }


Creo que esto puede ser mejor.
« Última modificación: 08 de Noviembre 2012, 08:06 por nosferacento »

cardiobeta

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 39
    • Ver Perfil
Re:Vaciar contenido de JTextField en base de datos usando sql en java
« Respuesta #3 en: 08 de Noviembre 2012, 00:50 »
Gracias nosferacento. Esta ultima sugerencia funcionó a la perfección. Estamos en contacto.

cardiobeta

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 39
    • Ver Perfil
Re:Vaciar contenido de JTextField en base de datos usando sql en java
« Respuesta #4 en: 09 de Noviembre 2012, 02:03 »
Una segunda pregunta: ¿Como hago para llenar un JComboBox llamado cb con los datos de la columna nombre. Hasta ahora tengo el siguiente codigo pero no funciona:

 
Código: [Seleccionar]
private void cargarlista() throws SQLException {
// TODO Auto-generated method stub
  Connection conn = null; 
        PreparedStatement Consulta = null;
        ArrayList<String> Lista = new ArrayList();   
     
      try {
          Class.forName("org.hsqldb.jdbcDriver" );
      } catch (Exception e) {
          System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
          e.printStackTrace();
          return;
      }     
      conn = DriverManager.getConnection("jdbc:hsqldb:file:/home/bladimir/Pacientes/Pacientes", "bladimir", "2704");
      st  = conn.createStatement();       
     
      try {
      Statement st = conn.createStatement();     
      Consulta = conn.prepareStatement("select nombre from pacientes");
              ResultSet rs = Consulta.executeQuery();
            while(rs.next()){
          Lista.add(new String("nombre"));
            ((DefaultListModel) modeloLista).addElement(rs.getString("nombre"));//nombre es el campo de la base de datos
               
                cb.setModel(modeloLista);
            }
      }
               catch (SQLException e) {
           System.out.println("Error de MySQL: " + e.getMessage());
         }
     
}

  Nuevamente gracias de antemano.
« Última modificación: 20 de Septiembre 2014, 18:45 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Vaciar contenido de JTextField en base de datos usando sql en java
« Respuesta #5 en: 09 de Noviembre 2012, 12:17 »
Creo que lo primero que deberías comprobar es que la consulta y extracción de datos a la base de datos funcione correctamente y luego proceder a lo que sería el asunto del JComboBox. Para ello puedes hacer un System.out.println con cada uno de los datos extraídos de la base de datos.

Para ello mira lo que te pongo en color:

int i=0; //Contador de elementos extraídos
try {
               Statement st = conn.createStatement();               
               Consulta = conn.prepareStatement("select nombre from pacientes");
                 ResultSet rs = Consulta.executeQuery();
 
               while(rs.next()){
               i = i +1; //Extracción del siguiente elemento
               System.out.println (""+rs.getString(i)); // Comprobación
               
                Lista.add(new String("nombre"));
                  ((DefaultListModel) modeloLista).addElement(rs.getString("nombre"));//nombre es el campo de la base de datos
                 
                   cb.setModel(modeloLista);
               }
            }


Prueba a ver si la extracción se hace bien. Además creo que esta línea puede estar mal:

Lista.add(new String("nombre"));

¿No sería Lista.add(rs.getString(i)); ?

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".