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

Consulta SQL Constructores, etc

Estas en el tema de Consulta SQL Constructores, etc en el foro de Java en Foros del Web. Primer post y ya pidiendo ayuda La verdad me registré recién, pero al parecer voy a pasar un buen tiempo por estos lados debido a ...
  #1 (permalink)  
Antiguo 23/11/2011, 16:00
 
Fecha de Ingreso: noviembre-2011
Mensajes: 3
Antigüedad: 12 años, 5 meses
Puntos: 0
Consulta SQL Constructores, etc

Primer post y ya pidiendo ayuda
La verdad me registré recién, pero al parecer voy a pasar un buen tiempo por estos lados debido a que estoy aprendiendo Java.

Como sea mi consulta es la siguiente:
Estoy haciendo un programa con Jdialog donde tengo un botón el cual lanza una clase que tiene las consultas SQL.
El asúnto es que necesito hacer estas consultas SQL con parametros obtenidos de un TextField.

Ejemplo:
Código:
select * from tabla where columna = parametro
Ese es el tipo de consulta que necesito realizar a travez de esta clase.

Intenté poniendo los parametros de la siguiente forma (simplificado):
Código:
static void main(string p)
{
("select * from tabla where columna =" +p)
}
Luego en el panel lo ejecuto de la siguiente forma:
Código:
clase.main(jTextField1.getText());
Y no me funciona >_>
He estado varios días intentando figurar por mi cuenta una nueva forma de realizar esta operación pero todavía nada.
Soy nuevito en Java así que si me pudieran explicar de forma sencilla como hacerlo se los agradecería mucho.
Por último les paso los códigos:

El código del botón:
Código:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            operaciones.qry(jTextField1.getText());
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(busqueda.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(busqueda.class.getName()).log(Level.SEVERE, null, ex);
        }
}
La Clase:
Código:
    static void qry(String r) throws ClassNotFoundException, SQLException
    {        
        Class.forName("com.mysql.jdbc.Driver");
    	Connection conn = DriverManager.getConnection(
		"jdbc:mysql://localhost:3306/base_de_datos","root","");
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(
 		"SELECT * FROM alumno WHERE rut_a ="+r);
        while (rs.next())
        {
            String rut = rs.getString("RUT_A");
            String nom = rs.getString("Nombre");
            String ape = rs.getString("Apellido");
            String eml = rs.getString("email");
            System.out.println(rut+"\t"+nom+"\t"+ape+"\t"+eml);
        }
        rs.close();
        stmt.close();
        conn.close(); 
    }
Ojalá pudieran ayudarme, gracias :)
  #2 (permalink)  
Antiguo 23/11/2011, 16:56
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Consulta SQL Constructores, etc

Asumo que los metodos estan muyyyy simplificados
no olvides las comillas simples de SQL:


Código:
static void main(string p)
{
"select * from tabla where columna =' " +p+" ' ")// comillas simples para character, deje espacios entre comillas simples y dobles solo para que se note la comilla simple.
}

mejor:

Código:
static void main(string p)
{
"select * from tabla where columna like ' " +p+" ' ")// comillas simples para character
}
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #3 (permalink)  
Antiguo 23/11/2011, 17:05
 
Fecha de Ingreso: noviembre-2011
Mensajes: 3
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Consulta SQL Constructores, etc

Excelente funciono perfectamente.
La verdad no sé como funcionan los apostrofes dentro de la sentencia pero eso fue lo que hizo la diferencia.
Podrías explicarme un poco como debo utilizarlos dentro del statement para estar seguro de como aplicarlo a nuevas consultas en un futuro :)

Porque por ejemplo si fuese un insert:
"insert into tabla values ("+r","+n","+a","+e")";
¿Cómo pondrias las comillas simples?

Última edición por registernao; 23/11/2011 a las 17:16
  #4 (permalink)  
Antiguo 23/11/2011, 17:31
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Consulta SQL Constructores, etc

claro ,


pon le cuidado que si tu insertas en el jtextfield:
Código:
hola'como'estas
,

la sentencia queda:

Código:
select * from tabla where columna = 'hola'como'estas'

toda una locura, eso lo solucionas con:


"select * from tabla where columna like ' " +p.replace("'","''")+" ' ")

o limitando los caracteres permitidos para el jtextfield con la clase:

Código:
public class LimCaracteres extends PlainDocument {
    


    private JTextField editor;
 

  
    public LimCaracteres(JTextField editor) 
    { 
        
        this.editor=editor;
        
    } 
     
    
   
    public void insertString(int arg0, String arg1, AttributeSet arg2) throws BadLocationException 
    { 

          
        

        boolean cumple = false;
        int ascii = arg1.charAt(0);

// los caracteres que permito yo solo son los mas utilizados en escritura y que no //son peligrosos para consultas sql (no verificado :P)
        if ((ascii > 63 && ascii < 92) || (ascii > 96 && ascii < 124) || ascii == 125 || ascii == 249 || ascii == 32 || ascii == 40 || ascii == 41 ) {
            cumple = true;
        } else if ((ascii > 47 && ascii < 63) || (ascii > 42 && ascii < 47) || (ascii > 34 && ascii < 38) || ascii == 93 || ascii == 63 || ascii == 34 || 
                   (ascii > 127 && ascii < 169)) { 
            cumple = true;
        }

        if (!cumple) {
            return;
        }
         super.insertString(arg0, arg1, arg2); 
    } 
     
}
la utilizaciòn:

Código:
jTextField1.setDocument(new LimCaracteres(jTextField1));
todo esto es bastante amplio pilla lo que se le pues insertar al jTextField1:


jtexfield que pide un nombre:
Código:
"Alicia'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%"
saludos... :)
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #5 (permalink)  
Antiguo 23/11/2011, 17:35
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Consulta SQL Constructores, etc

Cita:
Iniciado por registernao Ver Mensaje
Excelente funciono perfectamente.
La verdad no sé como funcionan los apostrofes dentro de la sentencia pero eso fue lo que hizo la diferencia.
Podrías explicarme un poco como debo utilizarlos dentro del statement para estar seguro de como aplicarlo a nuevas consultas en un futuro :)

Porque por ejemplo si fuese un insert:
"insert into tabla values ("+r","+n","+a","+e")";
¿Cómo pondrias las comillas simples?
corrigiend primero:

Código:
"insert into tabla values ("+r+","+n+","+a+","+e+")";
ahhora si:

Código:
"insert into tabla values ('"+r+"','"+n+"','"+a+"','"+e+"')";
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-
  #6 (permalink)  
Antiguo 23/11/2011, 17:50
 
Fecha de Ingreso: noviembre-2011
Mensajes: 3
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Consulta SQL Constructores, etc

Muchísimas gracias, se entiendio todo perfectamente :)
  #7 (permalink)  
Antiguo 23/11/2011, 18:05
Avatar de calichecal  
Fecha de Ingreso: junio-2009
Ubicación: Colombia
Mensajes: 288
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Consulta SQL Constructores, etc

Cita:
Iniciado por registernao Ver Mensaje
Muchísimas gracias, se entiendio todo perfectamente :)
ok listo: mira mas información:

http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL
__________________
Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad. -Einstein-

Etiquetas: netbeans
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:47.