Java - Java - Mysql - Consulta Select

 
Vista:
sin imagen de perfil

Java - Mysql - Consulta Select

Publicado por Rodrigo (3 intervenciones) el 05/11/2016 21:41:23
Hola que tal, me estoy introduciendo a este mundo de java y hay bastantes cosas sencillas que aún no puedo conseguir que funcionen. Muestro mis clases para que vean mi código y después les comento el error:

Mi clase Database
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;
 
import java.sql.*;
 
/**
 *
 * @author rodri
 */
public class Database {
 
    /* DATOS PARA LA CONEXION */
    /** base de datos por defecto es test*/
    private String db = "inmobiliariabase";
    /** usuario */
    private String user = "usuario";
    /** contraseña de MySql*/
    private String password = "pass";
    /** Cadena de conexion */
    private String url = "jdbc:mysql://localhost/"+db;
    /** variable para trabajar con la conexion a la base de datos */
    private Connection conn = null;
 
    /*Contructor*/
    public Database() {
 
 
    this.url = "jdbc:mysql://localhost/"+this.db;
       try {
         //obtenemos el driver de para mysql
         Class.forName("com.mysql.jdbc.Driver");
         //obtenemos la conexión
         conn = DriverManager.getConnection( this.url, this.user , this.password );
      }catch(SQLException | ClassNotFoundException e){
         System.err.println( e.getMessage() );
      }
   }
 
   public Connection getConexion() {
        return this.conn;
   }
}

Mi clase Persona que extiende de Database
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;
 
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
 
/**
 *
 * @author rodri
 */
public final class Persona extends Database {
    private String nombre;
    private Integer edad;
    public String email;
 
    public Persona(String nombre, int edad) {
        this.nombre = nombre;
        this.edad = edad;
        this.email = this.getEmail();
    }
 
    /**
     *
     * @return
     */
    public String getEmail() {
        try {
            PreparedStatement pstm;
            pstm = null;
            pstm = this.getConexion().prepareStatement( "SELECT `email` FROM `usuario` WHERE `nombreUsuario` = 'rodrigo'");
            ResultSet res;
            res = pstm.executeQuery();
 
            this.email = res.getString("email");
        } catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }
 
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public String getNombre() {
        return nombre;
    }
 
    public Integer getEdad() {
        return edad;
    }
 
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 
    public void setEdad(Integer edad) {
        this.edad = edad;
    }
}

Mi Servlet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;
 
import Model.Persona;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 *
 * @author rodri
 */
public class Procesar 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 nombre = request.getParameter("txtNombre");
        String edad = request.getParameter("txtEdad");
 
        if(nombre.equals("") || edad.equals("")){
            request.getRequestDispatcher("errorVacios.jsp").forward(request, response);
        }
        else {
            int ed = 0;
            try{
                ed = Integer.parseInt(edad);
            }
            catch(NumberFormatException ex){
                request.getRequestDispatcher("errornumero.jsp").forward(request, response);
            }
 
            Persona p1 = new Persona(nombre, ed);
            /*Para que el objeto p1 se pueda utilizar en todas las vistas, la
            guardarmos en una sesión
            */
            request.getSession().setAttribute("persona1", p1);
            request.getRequestDispatcher("exito.jsp").forward(request, response);
        }
    }
 
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
 
    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
 
    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
 
}

Bueno el problema que me da al ejecutarlo es el siguiente:
HTTP Status 500 - Internal Server Error


type Exception report

messageInternal Server Error

descriptionThe server encountered an internal error that prevented it from fulfilling this request.

exception
java.lang.NullPointerException


note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1.1 logs.


Me parece que el problema está en la consulta de la base de datos... pero ni siquiera puedo encontrar el log dentro del Netbeans para detallar el error.

ACLARACION: dentro de la clase Database cambie a "localhost" mi ip donde se encuentra alojada la base de datos mysql y también mi usuario y contraseña.

Agradezco desde ya cualquier ayuda que puedan darme. Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Java - Mysql - Consulta Select

Publicado por Hector (27 intervenciones) el 06/11/2016 00:11:00
Hola rodrigo, el error seguramente lo tienes porque no estas llamando a "super" desde el constructor de Persona debido a que no estas instanciando la clase padre Database, una ves ejecutes el constructor padre desde la clase persona seguramente te funcionara, sin embargo no es recomendable que uses a Database como clase padre de persona.

Te sugiero que elimines la herencia de la clase persona con database ya que son dos objetos completamente diferentes. Lo ideal seria que agregaras a la clase persona un objeto de Database y luego lo usaras.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Java - Mysql - Consulta Select

Publicado por Rodrigo (3 intervenciones) el 06/11/2016 15:26:24
Desde ya que agradezco mucho tu respuesta, pero no me solucionó el problema. El error que me sigue apareciendo es el mismo. Pongo el código que cambie:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;
 
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
 
import Model.Database;
 
/**
 *
 * @author rodri
 */
public final class Persona {
    private String nombre;
    private Integer edad;
    public String email;
 
    public Persona(String nombre, int edad) {
        this.nombre = nombre;
        this.edad = edad;
        this.email = this.getEmail();
    }
 
    /**
     *
     * @return
     */
    public String getEmail() {
        Database db1 = new Database();
        try {
            PreparedStatement pstm;
            pstm = null;
            pstm = db1.getConexion().prepareStatement( "SELECT `email` FROM `usuario` WHERE `nombreUsuario` = 'rodrigo'");
            ResultSet res;
            res = pstm.executeQuery();
 
            this.email = res.getString("email");
        } catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }
 
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public String getNombre() {
        return nombre;
    }
 
    public Integer getEdad() {
        return edad;
    }
 
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 
    public void setEdad(Integer edad) {
        this.edad = edad;
    }
 
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Java - Mysql - Consulta Select

Publicado por Hector (27 intervenciones) el 06/11/2016 18:11:15
El error seguramente esta ubicado en las clases de Persona o Database, lo mejor es que crees una clase main por separado y utilizes las clases Persona y Database alejado del servlet para ver que clase de error se esta ejecutando.

Tambien busca en el log del servidor las posiciones en las que esta el error y la subes aqui.

Aqui esta una guia de como buscarlas:

http://stackoverflow.com/questions/13835913/location-of-glassfish-server-logs
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar