Extraer campo de tipo string de una base de datos

espero y estés teniendo un excelente día mi pregunta es la siguiente, lo que quiero hacer es extraer el valor
de un campo que se encuentra en la base de datos, pero el valor es de tipo String y la verdad lo quiero extraer pero con
una variable dentro del result Set te presento mi código, el método recibe el nombre de usuario en el método
public static void metododefineRolUsuario (String palabrilla){
try {
String reciboPalabraUsuario=palabrilla;
Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/terrenos", "root", "");
Statement consulta = (Statement) c.createStatement();
// OJO la linea de abajo es la linea clave no se como comparar la variable dentro del select * from porque es de tipo cadena
ResultSet resultado = consulta.executeQuery("select * from usuarios where nombreUsuario =" +reciboPalabraUsuario);
// OJO la linea de arriba es la linea clave no se como comparar la variable dentro del select * from porque es de tipo cadena
int columna_tipo = resultado.findColumn("tipo");
boolean lleno = resultado.next();
while (lleno){
nombreDelUsuario = resultado.getString(columna_tipo);
lleno = resultado.next(); //se verifica si hay otro registro
}
} catch(Exception e){
System.err.println("Error en abrir la conexión");
System.err.println("ERROR:"+e.getMessage());
System.exit(0);
}
} // fin del metododefineRolUsuario

Utilizo mysql y neetbeans 6.9

2 Respuestas

Respuesta
1

Todas las consultas que requieran de parámetros(como la tuya en este caso que requiere de un string en el where) es mucho mas correcto utilizar el PreparedStatement en lugar del Statement, te evitara problemas de codificación y, lo mas importante, de seguridad.

La utilización es muy parecida a la del Statement. Consiste en crear la query en un String, ¿dejando con el símbolo? Todas las variables que quieres pasar a continuación, con este String, creas un PreparedStatement, y, una vez lo tienes, ¿le indicas que valor cogen los?, te pego tu código de esta forma a continuación:

String reciboPalabraUsuario = palabrilla;
 Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/terrenos", "root", "");
 String query = "select * from usuarios where nombreUsuario = ?";
 PreparedStatement consulta = c.prepareStatement(query);
 consulta.setString(1, reciboPalabraUsuario);
 ResultSet resultado = consulta.executeQuery();

Como ver, creo la query en la linea 3 con el campo en ?, luego en la linea 4 utilizo el método "prepareStatement" de connection, y le paso como parámetro la query definida en la linea 3.

Después, en la linea 5, le indico, con el método setString del preparetStatement, que le voy a pasar como parámetro un string, este método recibe un integer que indica que interrogante es el que estoy definiendo(al ser el primero, y único en este caso) es el valor 1, y después como segundo parámetro le paso el valor que quiero que coja el interrogante.

Con esto ya esta, finalmente, utilizas el método, executeQuery(), y ya tienes tu ResultSet.

Finalmente, una recomendación, es que no recorras el bucle de resultados como lo has hecho, es mas correcto y estándar utilizar el bucle while de la siguiente forma:

while (resultado.next()) { //Es mas correcto poner el next en el while, te hace lo mismo que tenias en tu antiguo codigo pero en menos lineas y mas limpio
    nombreDelUsuario = resultado.getString("tipo");
}

Como ves, es muy parecido a como lo tenias, pero con menos lineas y mas limpio.

Amigo muchas gracias, soy estudiante y la verdad me gusta mucho Java, es lo que mas me gusta te agradezco sinceramente, me funciono al 100% tu solución, gracias por compartir tus conocimientos, algún día cuando acabe de estudiar me gustaría ser como tu eres grande amigo

Respuesta
1

Tu estés teniendo un excelente día tu también.

Dime, ¿y en donde recide tu problema? Me dices que quieres hacer algo, me das tu código pero no me dices en que parte tienes problemas o si te da una exception o no, no puedo correr tu código puesto que no tengo la base de datos ni nada, así que te pido que por favor me ayudes a ayudarte.

amigo ya solucione el problema muchas gracias

String query = "select * from usuarios where nombreUsuario = ?";
PreparedStatement consulta = c.prepareStatement(query);
consulta.setString(1, reciboPalabraUsuario);
ResultSet resultado = consulta.executeQuery();

lo único que cambie es el preparedStatement para recibir parámetros de tipo string de todos modos gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas