Java - Ayuda consulta MySQL en Java

 
Vista:
Imágen de perfil de Cesar

Ayuda consulta MySQL en Java

Publicado por Cesar (5 intervenciones) el 21/03/2015 18:34:46
Hola que tal buen dia,
Mi problma es el siguiente, lo que psa es que tengo una consulta, la cual desde MYSQL me arroja resutaldos, pero al llamarala desde NETBEANS para llenar un jTable no me lanza ningun dato, este es mi codigo:

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
QUERY esde MYSQL
SELECT a.cod_usuario,a.nombre,a.apellido,
b.id_p,
c.titulo
FROM biblioteca_db.prestamos b
INNER JOIN biblioteca_db.usuarios a
INNER JOIN biblioteca_db.libros c
ON b.USUARIOS_cod_usuario=a.cod_usuario AND
b.LIBROS_cod_libro=c.cod_libro WHERE cod_usuario=111;//Repito desde aqui si me lanza resultado(Incluso si pongo el codigo asi '111')
 
='/usr/172000/172497/550da8a6e08e8-1.JPG' class='editor_img' border='0' alt='1' />
 
Metodo NETBEANS:
void tbpr(){
                String code=lblid.getText();//EN ESTE CAMPO GUARDO MI ID DEL USUARIO
                String []titulos={"Codu","Usuario","apellido","idp","titulo"};
                String []Registros= new String[5];
                model = new DefaultTableModel(null,titulos);
                //String sql = "CALL con_prs();";
                String sql="SELECT a.cod_usuario,a.nombre,a.apellido,\n" +
                            "b.id_p,\n" +
                            "c.titulo\n" +
                            "FROM biblioteca_db.prestamos b\n" +
                            "INNER JOIN biblioteca_db.usuarios a\n" +
                            "INNER JOIN biblioteca_db.libros c\n" +
                            "ON b.USUARIOS_cod_usuario=a.cod_usuario AND \n" +
                            "b.LIBROS_cod_libro=c.cod_libro;";//LLAMO AL QUERY CONCATENANDO EL CAMPO DONDE GUARDO EL CODIGO
            try{
                Statement st = cn.createStatement();
                ResultSet rs = st.executeQuery(sql);
                          while(rs.next())
                          {
                              Registros[0]= rs.getString("cod_usuario");
                              Registros[1]= rs.getString("nombre");
                              Registros[2]= rs.getString("apellido");
                              Registros[3]= rs.getString("id_p");
                              Registros[4]= rs.getString("titulo");
                              model.addRow(Registros);
                          }
                            tb_pr.setModel(model);
                            } catch (SQLException ex) {
                            Logger.getLogger(uprestamos.class.getName()).log(Level.SEVERE, null, ex);
                    }
    }
Si corro el programa tal cual esta arriba hace esto, pero no me lanza ningun error, solo no llena la tabla.
2

Algo mas, si ejecuto el QUERY sin el WHERE desde netbeans si me arroja datos, pero sin el filtro del usuario, intente usar como filtro correo y nombre, pero el resultado es el mismo, no me arroja nada:

3

Espero me puedan ayudar y muchas gracias por su tiempo.
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
Imágen de perfil de Alberto Ovalle Méndez
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda consulta MySQL en Java

Publicado por Alberto Ovalle Méndez (303 intervenciones) el 23/03/2015 19:06:38
Si te trae datos sin el WHERE significa que posiblemente estas pasando algún valor que no tienes o bien, lo mas seguro es que no estas pasando el valor de forma correcta.

Cuando trabajamos con querys parametrizadas podemos decir que Java tiene su forma particular de realizarlas. Te muestro a continuación como sería forma correcta de pasar valores en una consulta, pero antes te realizo una pequeña observación en tu consulta. No es necesario coloques "\n" ya que con solo hacer esto: "Ejemplo" + "Continuacion", es suficiente, ni el ";" para finalizar ya que "podemos decir" que el createstatement interpreta todo el String como un query. No esta mal, pero es una observación que te realizo.

Tambien es importante mencionar que en lo personal y te menciono como un consejo, trabaja con PreparedStatement ya que es una version mas poderosa en todos los sentidos que un Statement, puedes investigar sobre ello si tienes curiosidad.

Ahora, pasando a tu problema, tu consulta quedaria de la siguiente manera:

"SELECT a.cod_usuario,a.nombre,a.apellido,b.id_p,c.titulo FROM biblioteca_db.prestamos b INNER JOIN biblioteca_db.usuarios a INNER JOIN biblioteca_db.libros c ON b.USUARIOS_cod_usuario=a.cod_usuario AND b.LIBROS_cod_libro=c.cod_libro WHERE cod_usuario = ?"

En donde "?" es interpretado como un parametro. Ahora, para pasarle valores a ese parametro realizamos lo siguiente.

st.setString(1, "111")

En donde el primer valor significa la posicion y el segundo el String a pasar, cabe mencionar que no solo hay setString, sino tambien setInteger, setFloat, entre otros. Además, es importante que recuerdes que en este caso, el valor inicial siempre sera 1, por lo tanto no aplica el index 0.

Aqui el codigo completo.

String code=lblid.getText();
String []titulos={"Codu","Usuario","apellido","idp","titulo"};
String []Registros= new String[5];
model = new DefaultTableModel(null,titulos);
String sql="SELECT a.cod_usuario,a.nombre,a.apellido,b.id_p,c.titulo FROM biblioteca_db.prestamos b INNER JOIN biblioteca_db.usuarios a INNER JOIN biblioteca_db.libros c ON b.USUARIOS_cod_usuario=a.cod_usuario AND b.LIBROS_cod_libro=c.cod_libro WHERE cod_usuario = ?";
try{
PreparedStatement st = conn.prepareStatement(sql);
st.setString(1, "111");
ResultSet rs = st.executeQuery();
while(rs.next()){
Registros[0]= rs.getString("cod_usuario");
Registros[1]= rs.getString("nombre");
Registros[2]= rs.getString("apellido");
Registros[3]= rs.getString("id_p");
Registros[4]= rs.getString("titulo");
model.addRow(Registros);
}
tb_pr.setModel(model);
} catch (SQLException ex) {
Logger.getLogger(uprestamos.class.getName()).log(Level.SEVERE, null, ex);
}

Cualquier inconveniente, aquí estaremos. Suerte!
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