Foro de elhacker.net

Programación => Java => Mensaje iniciado por: manolazo en 25 Febrero 2013, 18:14 pm



Título: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: manolazo en 25 Febrero 2013, 18:14 pm
Hola.

Estoy mirando como va todo esto de JSP y servlets para principiantes, he buscado informacion y a la hora de practicar quiero hacer lo siguiente.

Utilizo Netbeans y he instalado un servidor MySQL . Tambien uso apache TOmcat

Quiero insertar unos datos a traves de un servlet en java en una tabla de la siguiente manera:

Primero me creo un nuevo proyecto WebServices a traves de Netbeans e instalo el conector mysql-connector-java-5.1.23-bin.jar en la libreria

A continuacion me creo una clase de java que establece la conexion con la base de datos:

Código:
package ejemplo1.Services;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class Conexion {
    
    public static Connection getConnection() throws ClassNotFoundException, SQLException{
        Connection databaseconnection = null;      
         Class.forName("com.mysql.jdbc.Driver");
         databaseconnection = DriverManager.getConnection("jdbc:mysql://localhost/prueba2", "root", "pepe");        
        return databaseconnection;      
    }    
}


Luego me creo un servlet. Lo que quiero es recoger los datos que introduzco por la barra de navegador y se me guarden en la base de datos.

Es decir, de esta manera: http://localhost:8080/WebApplication5_ServletSQL/ServletController?isbn=1547&titulo=quijote

Código:
@WebServlet(name = "ServletController", urlPatterns = {"/ServletController"})
public class ServletController extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
      
            String isbn= request.getParameter("isbn");
            String titulo = request.getParameter("titulo");            
                  
            try {                
                
                             Connection conn = Conexion.getConnection();  
                             PreparedStatement pst= conn.prepareStatement("INSERT INTO libro VALUES(?,?)");
                             pst.setString(1, isbn);
                             pst.setString(2, titulo);                            
                             pst.execute();

                }catch (ClassNotFoundException |SQLException ex){
                     ex.printStackTrace();
                 }            
      
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
  

La base de datos esta bien, todo esta bien implementado, es tan sencillo que no necesita de más. Pero por alguna extraña razon no se guardan los parametros en la base de datos.

Alguna idea?.
Un saludo.


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: 1mpuls0 en 25 Febrero 2013, 18:47 pm
No he trabajado con serlevt pero puedes intentar con lo siguiente:

1. Guarda tu query en una variable:
Código
  1. String queryInsert = "INSERT INTO table....";
  2.  

2. Muestra o imprime el resultado de tu string-query

3. Ejecuta directamente en la consola o gui el resultado de tu string-query.

Tambien revisa la conexión con la base de datos, revisa tus excepciones para ver si te arroja alguna.


Saludos.


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: manolazo en 25 Febrero 2013, 19:06 pm
No he trabajado con serlevt pero puedes intentar con lo siguiente:

1. Guarda tu query en una variable:
Código
  1. String queryInsert = "INSERT INTO table....";
  2.  

2. Muestra o imprime el resultado de tu string-query

3. Ejecuta directamente en la consola o gui el resultado de tu string-query.

Tambien revisa la conexión con la base de datos, revisa tus excepciones para ver si te arroja alguna.


Saludos.

Hola , gracias por contestar.

Perdona la ignoracia pero no se muy bien como mostrar o imprimir el resutado del string-query. Te refieres a poner un Syste.out?
La conexion de la base de datos es correcta.
Como te digo la logica del programa creo que es muy sencilla pero no veo donde puede andar el error.
gracias


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: 1mpuls0 en 25 Febrero 2013, 19:15 pm
xD si me refiero a un System.out.prinln() es que no sé si en servlet es igual :P

copias el resultado que te muestra en el output y lo pegas en tu consola, lo ejecutas y verifica que sea exitosa la insersión.

Saludos.


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: manolazo en 25 Febrero 2013, 19:19 pm
Hola,

En el servlet no va el System.out.println() ya que no muestra el resultado por consola, no es como una clase normal.

La insercion es exitosa si me creo una clase sin usar servlet con lo cual, no entiendo donde anda el error.




Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: 1mpuls0 en 25 Febrero 2013, 19:20 pm
Te falta un parentesis de cierre.
INSERT INTO tabla VALUES(v1,v2);

Código
  1. String isbn= request.getParameter("isbn");
  2. PreparedStatement pst= conn.prepareStatement("INSERT INTO libro VALUES(?,?");
  3.  

Quedaría así:

Código
  1. PreparedStatement pst= conn.prepareStatement("INSERT INTO libro VALUES(?,?)");
  2.  


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: manolazo en 25 Febrero 2013, 19:45 pm
Sorry, no me di cuenta, Ya esta editado.

Ya me gustaría pero por ahi no viene el error porque si no, me lanzaria una excepcio y no me lanza nada.

Seguimos igual...


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: Pablo Videla en 25 Febrero 2013, 19:52 pm
Coloca una excepcion general, solo veo 3 tipos de excepciones y que pasa si no se cumple ninguna?

completa con otro catch(Exception e)


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: 1mpuls0 en 25 Febrero 2013, 19:54 pm
Sorry, no me di cuenta, Ya esta editado.

Ya me gustaría pero por ahi no viene el error porque si no, me lanzaria una excepcio y no me lanza nada.

Seguimos igual...

o.O que raro, debería enviarte una excepción de sintaxis, verifica los tipos de errores que pueden resultar y deberías buscar una forma de mostrar la consulta :P en texto plano en el output eso ayuda mucho.

Por otro lado no sé nada de servlets xD espero que alguien más te pueda ayudar.

Saludos.


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: manolazo en 25 Febrero 2013, 21:01 pm
Coloca una excepcion general, solo veo 3 tipos de excepciones y que pasa si no se cumple ninguna?

completa con otro catch(Exception e)

Hola, He puesto otro catch como dices y cuando se introducen los parametros no se lanza ningun tipo de error ni exception , y cuando voy al workbench de mysql y actualizao no aparecen los datos insertados.
Que puede haber mal? es que todo parece correcto, es un código muy sencillo!!.  ¿donde estara el error???


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: Pablo Videla en 25 Febrero 2013, 21:13 pm
No pillo el error, te recomiendo usar esta clase hecha XD

http://pablovidela.wordpress.com/2009/09/21/conectar-base-datos-mysql-con-javajdbc/


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: 1mpuls0 en 25 Febrero 2013, 23:27 pm
Men tienes algo raro xD el code funciona bien.
Una pregunta tonta, entonces si no tienes una forma mostrar o imprimir resutlados como si fuera un System.out.println();
Como sabes que tu conexión es correcta?, yo cambié los valores de mi conexión y se ejecutó, no envio mensaje en ninguna salida del navegador y repito no sé servlets por eso mi duda.

https://docs.google.com/file/d/0B1qtAELJkgilaEhibVN4ODN4STg/edit?usp=sharing (https://docs.google.com/file/d/0B1qtAELJkgilaEhibVN4ODN4STg/edit?usp=sharing)

EDITO: Me refiero a que primero ejecuté el programa y se ingresaron los datos a la DB después cambié la contraseña de la conexion y abrio el navegador y obviamente ya no insertó nada pero ¿Como saber cuando se está conectando correctamente a la DB?.

Saludos.


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: manolazo en 25 Febrero 2013, 23:35 pm
Men tienes algo raro xD el code funciona bien.
Una pregunta tonta, entonces si no tienes una forma mostrar o imprimir resutlados como si fuera un System.out.println();
Como sabes que tu conexión es correcta?, yo cambié los valores de mi conexión y se ejecutó, no envio mensaje en ninguna salida del navegador y repito no sé servlets por eso mi duda.

https://docs.google.com/file/d/0B1qtAELJkgilaEhibVN4ODN4STg/edit?usp=sharing (https://docs.google.com/file/d/0B1qtAELJkgilaEhibVN4ODN4STg/edit?usp=sharing)

EDITO: Me refiero a que primero ejecuté el programa y se ingresaron los datos a la DB después cambié la contraseña de la conexion y abrio el navegador y obviamente ya no insertó nada pero ¿Como saber cuando se está conectando correctamente a la DB?.

Saludos.

Joder, a ti si te pilla los datos en MySQL con el mismo codigo que yo uso.

Por que a mi no?
 Tengo la tabla bien creada y la conexion sé que funciona porque si uso una clase parecida a DonVidela sin usar Scriptlet , los datos los introduce de forma correcta con lo cual , conexion hay.
Será algo del explorer o del crome?
No se que puede ser


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: manolazo en 25 Febrero 2013, 23:42 pm
PErdon perdon, edito.

Darhius tu no lo estas tomando los datos por parámetro, estas metiendolos directamente asignando el valor a la variable y por eso te funciona.

Como hay que hacerlo es pasando los datos por el localhost a traves del navegador!!.
En mi caso seria introduciendo la siguiente direccion:
http://localhost:8080/WebApplication5_ServletSQL/ServletController?isbn=1547&titulo=titulo2

Para ello tienes que tener instalado  un servidor tipo Tomcat.

Los parametros se recogen en el metodo processRequest de la manera que siguiente:
 
            String isbn= request.getParameter("isbn");
            String titulo = request.getParameter("titulo");           


Mira a ver si te funciona asi.

Un saludo.



Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: 1mpuls0 en 25 Febrero 2013, 23:54 pm
Si lo tengo instalado :P

https://docs.google.com/file/d/0B1qtAELJkgildWp6LXFtakxOTXM/edit?usp=sharing (https://docs.google.com/file/d/0B1qtAELJkgildWp6LXFtakxOTXM/edit?usp=sharing)

Saludos.


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: Pablo Videla en 26 Febrero 2013, 00:03 am
De donde estas ejecutando ese metodo, esta como protected, y solo algo que herede ese metodo lo puede ejecutar.... colocale public a ver que tal, no se si este equivocado  :xD


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: 1mpuls0 en 26 Febrero 2013, 00:09 am
No lo creo :P yo también lo tengo así. Ahí se mira en las caputas que hice. :/


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: manolazo en 26 Febrero 2013, 00:37 am
No lo creo :P yo también lo tengo así. Ahí se mira en las caputas que hice. :/

Abres explorer o crome? o introduces los parametros cuando pulsas boton derecho - run en el servet?
Veo que a ti si te guarda los datos. No entiendo que me falla, en fin ... .


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal?
Publicado por: 1mpuls0 en 26 Febrero 2013, 00:39 am
Abres explorer o crome? o introduces los parametros cuando pulsas boton derecho - run en el servet?
Veo que a ti si te guarda los datos. No entiendo que me falla, en fin ... .

Clic derecho sobre el archivo-> Run File.

Pues tampoco tengo idea :/

Si no te molesta pasame tu proyecto aunque en teoría es el mismo xD solo para importarlo y ver si hay algo más.

Saludos.


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal? SOLUCIONADO!!!
Publicado por: manolazo en 26 Febrero 2013, 01:25 am
Hola compañero.

AL final he eliminado la tabla, y me he creado otra y ahora si funciona.

No se que podria estar mal en la tabla anterior, en un principio no habia nada anómalo pero ya funciona a la perfección.

Gracias por la ayuda!!

Un saludo.


Título: Re: Meter datos en MySQL a traves de un servlet. Que esta mal? SOLUCIONADO!!!
Publicado por: 1mpuls0 en 26 Febrero 2013, 01:41 am
Hola compañero.

AL final he eliminado la tabla, y me he creado otra y ahora si funciona.

No se que podria estar mal en la tabla anterior, en un principio no habia nada anómalo pero ya funciona a la perfección.

Gracias por la ayuda!!

Un saludo.

Si, suponia que era algo de la bd pero como comentaste que insertaba el resultado bien lo descarté.
Pero es bueno que investigues como mostrar algunos resultados en consola. Tengo 7 años como desarrollador y ese es un tip que te puedo dar, para que tomes el resultado de tu consulta y lo insertes directamente en el DBMS
Lo bueno es que ya está funcionando.

Por cierto los errores (resultado de las excepciones) se guardan en Apache/logs/catalina%fecha%

Saludos.