Java - Consulta de Java y SQL

 
Vista:
Imágen de perfil de Álvaro
Val: 8
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Consulta de Java y SQL

Publicado por Álvaro (4 intervenciones) el 28/05/2019 11:19:00
Buenos días/tardes/noches, estoy realizando un pequeño proyecto en Java con interfaces y conexión a una base de datos y estoy teniendo un persistente problema. Con respecto a la consulta del siguiente método, me sale un error sintáctico, pero no logro averiguar cuál es...


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static boolean determinarTipoUsuario(Conexion conexion, JTextField nombreUsuario) throws SQLException {
    conexion = new Conexion();
    boolean esAdministrador = false;
 
    String query = "SELECT nombreUsuario FROM libreria.usuario WHERE tipoUsuario = '" + "administrador" + "AND nombreUsuario = " + "'" + nombreUsuario.getText() + "'" + ";";
    Statement sTQuery = conexion.establecerConexion().createStatement();
    ResultSet consulta = sTQuery.executeQuery(query);
    System.out.println("Antes del boolean");
    System.out.println(consulta.getString("nombreUsuario"));
    System.out.println(consulta.getString("tipoUsuario"));
 
    if (consulta.getString("nombreUsuario").equalsIgnoreCase(nombreUsuario.getText()) && consulta.getString("tipoUsuario").equalsIgnoreCase("administrador")) {
        esAdministrador = true;
    }
 
    conexion.cerrarConexion();
 
    return esAdministrador;
}

Agradecería vuestra ayuda, ya que soy un poco inexperto, y ya me he visto la documentación de la sintaxis, varios foros, el sagrado StackOverFlow etc.. etc..
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

Consulta de Java y SQL

Publicado por Tom (1831 intervenciones) el 28/05/2019 12:20:10
Especifica eso de "un error sintáctico" que dices que "te sale" (No es que a nadie le haga falta para ver tu error, que está claro, es para que al menos leas lo que tú mismo escribes).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Consulta de Java y SQL

Publicado por Billy Joel (875 intervenciones) el 28/05/2019 17:25:40
Puedo ver tantos errores desde la primera línea. Vamos a tratar de corregirlos...

Parámetro conexion
Si me dices que el parámetro conexion lo estas enviando null para que se inicialice en el método entonces todo bien.

La consulta sql
1
String query = "SELECT nombreUsuario FROM libreria.usuario WHERE tipoUsuario = '" + "administrador" + "AND nombreUsuario = " + "'" + nombreUsuario.getText() + "'" + ";";

Antes de + "administrador" + abres una comilla y no la cierras, eso te va a dar un error en la consulta. Además estas concatenando un String (administrador) que es fijo y no cambia y como no cambia sería mejor dejarlo corrido solo digo. Otra cosa tampoco dejaste un espacio antes del AND. Corregido quedaría así:
1
String query = "SELECT nombreUsuario FROM libreria.usuario WHERE tipoUsuario = 'administrador' AND nombreUsuario = '" + nombreUsuario.getText() + "'";

ResultSet
Para obtener los datos provenientes del ResultSet es importante mover el cursor interno que tiene. Básicamente te hizo falta preguntar si tenía algún registro. Para corregir esto voy a suponer que tu consulta (query) está haciendo referencia a una llave primaria y que solo debería traer un registro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static boolean determinarTipoUsuario(Conexion conexion, JTextField nombreUsuario) throws SQLException {
    conexion = new Conexion();
    boolean esAdministrador = false;
    //String query = "SELECT nombreUsuario FROM libreria.usuario WHERE tipoUsuario = '" + "administrador" + "AND nombreUsuario = " + "'" + nombreUsuario.getText() + "'" + ";";
    String query = "SELECT nombreUsuario FROM libreria.usuario WHERE tipoUsuario = 'administrador' AND nombreUsuario = '" + nombreUsuario.getText() + "'";
    Statement sTQuery = conexion.establecerConexion().createStatement();
    ResultSet consulta = sTQuery.executeQuery(query);
    System.out.println("Antes del boolean");
    if (consulta.next()) {
        System.out.println(consulta.getString("nombreUsuario"));
        //System.out.println(consulta.getString("tipoUsuario"));
        if (consulta.getString("nombreUsuario").equalsIgnoreCase(nombreUsuario.getText())
                /*&& consulta.getString("tipoUsuario").equalsIgnoreCase("administrador")*/) {
            esAdministrador = true;
        }
    }
    conexion.cerrarConexion();
    return esAdministrador;
}

Voy a suponer que la tabla libreria.usuario tiene una columna llamada tipoUsuario PERO dentro de la consulta solamente estas consultando por una columna que se llama nombreUsuario en donde el tipoUsuario sea igual a administrador.
Si haces esto: consulta.getString("tipoUsuario") traería un NullPointerException
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar