elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problema con base de datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con base de datos  (Leído 1,897 veces)
reeyesg

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Problema con base de datos
« en: 20 Julio 2015, 19:49 pm »

Bnas tardes amigos, tengo un pequeño problema cn base de datos q no inserta los datos en la tabla y me da un error :C, el me conecta bn mas no me agrega los datos a la tabla

aqui la clase main conexion

Código
  1. package controldeganado;
  2. import controldeganado.*;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8.  
  9. /**
  10.  *
  11.  * @author Administrador
  12.  */
  13. public class conexion {
  14.  private Connection conexion=null ;
  15.    /**
  16.     * Método utilizado para recuperar el valor del atributo conexion
  17.     * @return conexion contiene el estado de la conexión
  18.     *
  19.     */
  20.    public Connection getConexion()
  21.    {
  22.       return conexion;
  23.    }
  24.  
  25.    /**
  26.     * Método utilizado para establecer la conexión con la base de datos
  27.     * @return estado regresa el estado de la conexión, true si se estableció la conexión,
  28.     * falso en caso contrario
  29.     */
  30.    public boolean crearConexion()
  31.    {
  32.       try {
  33.          Class.forName("org.postgresql.Driver");
  34.          conexion = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Ganado","postgres","1993");
  35.          if(conexion!=null){
  36.              return true;
  37.          }
  38.       }
  39.       catch (SQLException ex) {
  40.          System.out.println("error en conexion: "+ex);
  41.       }
  42.       catch (ClassNotFoundException ex) {
  43.          System.out.println(ex);
  44.       }
  45.       return false;
  46.    }
  47.  
  48.    /**
  49.     *
  50.     *Método utilizado para realizar las instrucciones: INSERT, DELETE y UPDATE
  51.     *@param sql Cadena que contiene la instrucción SQL a ejecutar
  52.     *@return estado regresa el estado de la ejecución, true(éxito) o false(error)
  53.     *
  54.     */
  55.    public boolean ejecutarSQL(String sql)
  56.    {
  57.       try {
  58.           PreparedStatement sentencia = conexion.prepareStatement(sql);
  59.          sentencia.execute(sql);
  60.          return true;
  61.       } catch (SQLException ex) {
  62.            return false;
  63.       }
  64.    }
  65.  
  66.    /**
  67.     *
  68.     *Método utilizado para realizar la instrucción SELECT
  69.     *@param sql Cadena que contiene la instrucción SQL a ejecutar
  70.     *@return resultado regresa los registros generados por la consulta
  71.     *
  72.     */
  73.    public ResultSet ejecutarSQLSelect(String sql)
  74.    {
  75.       ResultSet resultado;
  76.       try {
  77.          PreparedStatement sentencia = conexion.prepareStatement(sql);
  78.          resultado = sentencia.executeQuery();
  79.          return resultado;
  80.       } catch (SQLException ex) {
  81.          System.err.println("Error "+ex);
  82.          return null;
  83.       }
  84.    }  
  85.  
  86.  
  87. }
  88.  


class conexxion
Código
  1. public class conexxion {
  2. public static conexion conexion = new conexion();
  3.    /**
  4.      * @param args the command line arguments
  5.      */
  6.    public static void main(String[] args) {
  7.        // TODO code application logic here
  8.           System.out.println("Conexion exitosa: "+ conexion.crearConexion());
  9.        if(conexion.crearConexion()){
  10.            //Form f = new Form();
  11.             aganado f= new aganado();
  12.            f.setVisible(true);
  13.        }
  14.    }
  15.  
  16. }

y el codoigo para agregar

Código
  1. private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {                                          
  2.  
  3.  
  4.      try{
  5.  
  6.        String sql="INSERT INTO \"CGanado\"(c_practico, nombre, estado, raza, observacion, estatus, f_nacimiento, c_padre, c_madre, n_parto, c_peso) VALUES ('"+ txtCodigo.getText() +"','"+ txtNombre.getText() +"','"+ txtEstado.getText() +"','"+ txtRaza.getText() +"','"+ txtObser.getText() +"','"+ txtEstatus.getText() +"','"+ txtFecha.getText() +"','"+ txtP.getText() +"','"+ txtM.getText() +"','"+ txtNp.getText() +"','"+ txtPeso.getText() +"' )";
  7.  
  8.            // ps.setInt(1,Integer.parseInt(jTextcedula.getText()));
  9.             PreparedStatement ps = con.getConexion().prepareStatement(sql);
  10.                // ps.setInt(1,Integer.parseInt(jTextcedula.getText()));
  11.                ps.setString(1,txtCodigo.getText());
  12.                ps.setString(2,txtEstado.getText());
  13.                ps.setString(3,txtEstatus.getText());
  14.                ps.setString(4,txtFecha.getText());
  15.                ps.setString(5,txtM.getText());
  16.                ps.setString(6,txtNombre.getText());
  17.                ps.setString(7,txtNp.getText());
  18.                ps.setString(8,txtObser.getText());
  19.                ps.setString(9,txtP.getText());
  20.                ps.setString(10,txtPeso.getText());
  21.                ps.setString(11,txtRaza.getText());
  22.                ps.setBinaryStream(12,fis,longitudBytes);
  23.                ps.execute();
  24.  
  25.  
  26.         JOptionPane.showMessageDialog(rootPane,"Guardado correctamente");
  27.        }catch(SQLException | NumberFormatException | HeadlessException x){
  28.            JOptionPane.showMessageDialog(rootPane, "exception 2 "+x);
  29.  
  30.          }
  31.    }        


En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Problema con base de datos
« Respuesta #1 en: 21 Julio 2015, 01:58 am »

Creo que no has entendido bien cómo se usa PreparedStatement. Esta clase se usa para preparar una sentencia sin incluir los valores en ella, es decir. En tu caso, debería ser asi:

Código
  1. String sql = "INSERT INTO \"CGanado\" (c_practico, nombre, estado, " +
  2. "raza, observacion, estatus, f_nacimiento, c_padre, c_madre, n_parto, c_peso)" +
  3. "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
  4.  
  5. try (
  6.    Connection con = Connection.getConnection();
  7.    PreparedStatement pst = con.preparedStatement(sql)) {
  8. ps.setString(1, txtCodigo.getText());
  9. ps.setString(2, txtEstado.getText());
  10. ps.setString(3, txtEStatus.getText());
  11. ps.setString(4, txtFecha.getText());
  12. ps.setString(5, txtM.getText());
  13. ps.setString(6, txtNombre.getText());
  14. ps.setString(7, txtNp.getText());
  15. ps.setString(8, txtObser.getText());
  16. ps.setString(9, txtP.getText());
  17. ps.setString(10, txtPeso.getText());
  18. ps.setString(11, txtRaza.getText());
  19.  
  20.        ps.execute();
  21. } catch(SQLException e) {
  22.    e.printStackTrace();
  23. }

Usas un PreparedStatement siempre que primero deseas validar los datos que armarán la consulta, esto es muy importante por un tema de seguridad, porque si no validas los datos de entrada, tienes un 100% de posibilidades que te hagan un SQLi con éxito de manera sencilla.



1. NO uses:

Código
  1. con.getConnection().prepareStatement

Porque de ésta forma no estás controlando el ciclo de vida de la conexión. Siempre obtén una conexión y al final ciérrala. En el caso que te he puesto, la conexión se cierra automáticamente porque estoy usando try catch with resources una nueva característica de Java 7 que hace que los flujos y conexiones se cierren automáticamente.

2. ¿Cuál es el propósito de setString(12, fis, longitudbytes)? Si solo especificas 11 columnas.

3. Las clases en Java, SIEMPRE empiezan con mayúscula, siguen la nomenclatura PascalCasa o Upper camelCase.

4. Decir esto:

Citar
tengo un pequeño problema cn base de datos q no inserta los datos en la tabla y me da un error :C

Es equivalente a no de cir nada. Si quieres una ayuda concreta, debes de ser específico en tu problema. Si tienes un error, ¿por qué no pegas el rasteo de pila (stack trace) para que podamos verlo?



Te recomiendo leas sobre buenas prácticas en Java y patrones de diseño, que puedes encontrar en este mismo foro y que te ayudarán muchísimo.


Saludos.


« Última modificación: 21 Julio 2015, 02:01 am por Gus Garsaky » En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
shellb_c0de

Desconectado Desconectado

Mensajes: 99


el software es como el sexo, mejor cuando es libre


Ver Perfil
Re: Problema con base de datos
« Respuesta #2 en: 22 Julio 2015, 01:33 am »

adicional a lo que se comenta en el post anterior puedes  ps.execute() por ps.executeUpdate()

para hacer rastreo de pila puedes hacer

Código
  1. String error ="";
  2. StackTraceElement[] st = excepcion.getStackTrace();
  3.         for (int ix = 0; ix < st.length; ix++) {
  4.             error = error +  st[ix];
  5. }
Citar
Siempre obtén una conexión y al final ciérrala. En el caso que te he puesto, la conexión se cierra automáticamente porque estoy usando try catch with resources una nueva característica de Java 7 que hace que los flujos y conexiones se cierren automáticamente.

Interesante Gus Garsaky no conocia esta caracteristica, es decir en vez de hacer el bloque try/catch/finally  el mismo try realiza el cierre de las conexiones vea pues

En línea

“Tu vida solo es la suma del resto de una ecuación no balanceada, connatural a la programación de Matrix. Eres el producto eventual de una anomalía, que no se ha logrado suprimir de esta armonía de precisión matemática. Aunque sigues siendo una incomodidad que evito con frecuencia, es previsible y no escapa a unas medidas de control que te han conducido inexorablemente aquí.
Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Re: Problema con base de datos
« Respuesta #3 en: 22 Julio 2015, 02:18 am »

Así es, toda clase que implemente de forma directa o heredada la interface Autocloseable, se puede utilizar con try - catch with resources.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Un Problema Con Una Base de datos
PHP
Lu7h0r 4 2,041 Último mensaje 30 Diciembre 2006, 02:15 am
por Lu7h0r
Problema al Borrar datos de la Base de Datos « 1 2 3 »
PHP
bels_mike 20 9,400 Último mensaje 31 Diciembre 2007, 18:34 pm
por Azielito
Problema con base de datos y VB.net
.NET (C#, VB.NET, ASP)
oscarj24 1 3,123 Último mensaje 21 Junio 2010, 02:09 am
por oscarj24
Problema con ID en base de datos
PHP
Feedeex 1 1,739 Último mensaje 22 Diciembre 2010, 17:03 pm
por Devilboy.Devil
Problema Al Mostrar Datos De Base De Datos
Java
ZedGe 2 2,840 Último mensaje 31 Julio 2012, 21:23 pm
por reylagarto19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines