Java - ERROR EN CONSULTA - You have an error in your SQL syntax

 
Vista:
Imágen de perfil de Efrain

ERROR EN CONSULTA - You have an error in your SQL syntax

Publicado por Efrain (28 intervenciones) el 17/07/2015 22:00:48
ME DEVUELVE ERROR DE SINTAXIS EN MY SQL

1
2
3
4
5
6
7
8
9
10
11
12
public int AutentificarUsuario(String SQL ,String Usuario , String Password )throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException
  {
      int resultado = -1 ;
      Class.forName(this.driverDB);
      conexion = DriverManager.getConnection(urlHost + nombreDB ,usuarioDB ,passworDB);
      PreparedStatement comando = conexion.prepareStatement(SQL);
      comando.setString(1, Usuario);
      comando.setString(2, Password);
      ResultSet RS = comando.executeQuery(SQL);
      if (RS.next()) {resultado= RS.getInt("ID");}
      return resultado ;
  }
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and Password = ?' at line 1
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

ERROR EN CONSULTA - You have an error in your SQL syntax

Publicado por Franco (1 intervención) el 17/07/2015 23:32:39
Hola.
Y la consulta sql; como es la estructura de ella?
Porque estas inicializando tu variable resultado con "-1".
Estas ocupando el if(rs.next()) porque solo quieres un resultado.
Checa tu consulta, el error te lo esta diciendo, que hay un error en ella.
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
Imágen de perfil de Efrain

ERROR EN CONSULTA - You have an error in your SQL syntax

Publicado por Efrain (28 intervenciones) el 20/07/2015 02:39:54
ASI QUEDO BIEN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public int AutentificarUsuario2(String SQL ,String Usuario , String Password )throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException
{
      int resultado = -1 ;
      ResultSet RS = null ;
      Class.forName(this.driverDB);
      conexion = DriverManager.getConnection(urlHost + nombreDB ,usuarioDB ,passworDB);
      PreparedStatement comando = conexion.prepareStatement(SQL);
      comando .setString(1,Usuario);
      comando .setString(2,Password);
      try {  RS = comando.executeQuery();
      if (RS.next()) {resultado= RS.getInt("ID");}}
          catch (SQLException ex ) {System.out.println(ex);}
      conexion.close();
      RS.close();
      return resultado ;
}
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

ERROR EN CONSULTA - You have an error in your SQL syntax

Publicado por Fausto Medina (2 intervenciones) el 20/07/2015 17:57:00
Pero podría mejorar.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static int AutentificarUsuario2(String SQL ,String Usuario , String Password ) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException {
      conexion = getConnection(urlHost + nombreDB ,usuarioDB ,passworDB);
      comando = conexion.prepareStatement(SQL);
      comando.setString(1,Usuario);
      comando.setString(2,Password);
       rs = comando.executeQuery();
      if (rs.next()) {resultado= rs.getInt("ID");}
      if(conexion != null) {
      try {
       conexion.close();
       } catch(SQLException e) {
        err.printf("Error al cerrar conexión%s%n", e.getCause());
       }
      }
    if(rs != null) {
     try {
      rs.close();
     } catch(SQLException e) {
      err.printf("Error al  cerrar el ResulSet%s%n", e.getCause());
      }
     }
   return resultado ;
}

Haciendo el método estático para que no tengas que instanciar la clase de estas forma
MiClase clase = new MiClase();
Si no hacerlo directo llamando a tu función así:

int valor = MiClase. AutentificarUsuario2(......);
Se tiene que comprobar que realmente se este cerrando la conexión if(conexion != null) cerrarla y así también el PrepareStatement.

En las versiones de JavaSE 7 y 8.
Ya no hay necesidad de Utilizar la clase Class.forName(....);
Porque lo carga en automático.

Puedes ocupar try-with-resources que se encargan automáticamente de cerrar las conexiones.
Esto es muy practico y te ayuda a desarrollar un poco más libre, así si se te olvida cerrar una conexion, una sentencia etc.., java lo hará en el momento que se necesite y así liberes recursos.
1
2
3
4
5
6
7
8
9
try( Connection conexion = DriverManager.getConecion(....);
       PrepareStatement pstm = conexion.prepareStatement(sql); ) {
         ...................
        try (ResultSet rs = ps.executeQuery();) {
          ...............................................
        }
} catch(SQLException e) {
  err.printf("Error: %s%n", e.getError());
}
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