Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: cardiobeta en 07 de Noviembre 2012, 17:00
-
Hola a todos. Tengo el siguiente codigo:
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.
-
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.
-
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.
-
Gracias nosferacento. Esta ultima sugerencia funcionó a la perfección. Estamos en contacto.
-
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:
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.
-
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)); ?