Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] PreparedStatement con parametros: problema con String con numeros

Estas en el tema de PreparedStatement con parametros: problema con String con numeros en el foro de Java en Foros del Web. Buenas, Estoy haciendo un programilla básico para hacer unas consultas a una BBDD Oracle y extraer información de dichas consultas a ficheros Excel. He hecho ...
  #1 (permalink)  
Antiguo 16/05/2020, 10:27
 
Fecha de Ingreso: julio-2012
Ubicación: Madrid
Mensajes: 95
Antigüedad: 7 años, 10 meses
Puntos: 2
Pregunta PreparedStatement con parametros: problema con String con numeros

Buenas,

Estoy haciendo un programilla básico para hacer unas consultas a una BBDD Oracle y extraer información de dichas consultas a ficheros Excel.

He hecho pruebas del programa usando una query fija y funciona correctamente, devolviendo un resultado:

Código:
String consulta = "select * from T_USUARIO where nombreUser = 'JUAN123TEST' ";
PreparedStatement ps = con.prepareStatement(consulta);

ResultSet rs = sentencia.executeQuery();
Ahora estoy tratando de usar la clase 'PreparedStatement' con parametros:

Código:
String userName = "JUAN123TEST";

String consulta = "select * from T_USUARIO where nombreUser = ? ";
PreparedStatement ps = con.prepareStatement(consulta);
ps.setString(1, userName);

ResultSet rs = sentencia.executeQuery();
Si lo hago así, me dice que no hay resultados.

Creo que el problema es que la cadena de la variable 'userName' contiene letras y numeros y se hace un lio con eso.

¿Alguna idea de cómo solucionarlo? Gracias.
  #2 (permalink)  
Antiguo 16/05/2020, 10:53
 
Fecha de Ingreso: abril-2011
Mensajes: 123
Antigüedad: 9 años, 1 mes
Puntos: 43
Respuesta: PreparedStatement con parametros: problema con String con numeros

Parece correcto, excepto el espacio en blanco al final del string. Cambia

Código Java:
Ver original
  1. String consulta = "select * from T_USUARIO where nombreUser = ? ";

por

Código Java:
Ver original
  1. String consulta = "select * from T_USUARIO where nombreUser = ?";

EDIT. Según tu código

Código Java:
Ver original
  1. ResultSet rs = sentencia.executeQuery();

debería ser realmente:

Código Java:
Ver original
  1. ResultSet rs = ps.executeQuery();

https://www.javatpoint.com/PreparedStatement-interface
  #3 (permalink)  
Antiguo 16/05/2020, 14:01
 
Fecha de Ingreso: julio-2012
Ubicación: Madrid
Mensajes: 95
Antigüedad: 7 años, 10 meses
Puntos: 2
Respuesta: PreparedStatement con parametros: problema con String con numeros

He probado lo de quitar el espacio final, tal y como me indicas, pero sigue diciendome que no hay resultados.
Agrego mas código de mi programa:

Código:
String consulta = "select * from T_USUARIO where nombreUser = ?";
String userName = "JUAN123TEST";

//load the driver class for Oracle
Class.forName(CONN_FACTORY_CLASS_NAME);
Connection miConexion = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);

PreparedStatement ps = miConexion.prepareStatement(consulta);
ps.setString(1, userName);

ResultSet rs = ps.executeQuery();

if(!rs.next()) {
   LOGGER.log(Level.INFO, "Sin resultados.");
} else {
   do{
   //Muestro el resultado de la query por consola
   }while(rs.next());
}
Al final, he visto que el problema viene porque al recuperar la info del campo 'nombreUser', no se por qué le mete muchos espacios a la derecha al mostrarlo en consola.

Lo que he tenido que hacer el modificar la consulta de la siguiente forma:

Código:
String consulta = "select * from T_USUARIO where RTRIM(nombreUser) = ?";
Así ya funciona



La zona horaria es GMT -6. Ahora son las 15:46.