Tengo algo de código Java como

int userid = take user input;

Y, a continuación, ejecuta la siguiente instrucción sql,

        Class.forName(dbdriver);
        conn = DriverManager.getConnection(url, username, password);
        st = conn.createStatement();

        st.executeUpdate("select * from person where uid = userid" );

Ahora, no sé el resultado devuelto es null. Creo que where uid = userid está dando mal resultado porque está buscando literal valor uid «userid». En realidad, quiero obtener la información de la tabla persona sobre proporcionada por el usuario uid valores. ¿Alguien puede ayudarme a como solucionar esto?

  • Puedes mostrar el código de java donde hacer la consulta? Exactamente cómo se pasa el valor de userid en la consulta depende mucho de cómo se está haciendo la llamada JDBC.
  • Nos muestran su código y stacktrace.?
  • Se puede incluir el código real que se está ejecutando, y se describen más detalladamente en qué comportamiento observas?
  • Esto es bastante básico. ¿Alguna vez has empezado a aprender realmente el tema con el oficial de tutoriales? Comience aquí: download.oracle.com/javase/tutorial/jdbc/basics/index.html Especialmente el capítulo «Instrucciones Preparadas» debe ser útil.
  • Puedo añadir el código.
  • Srry, puedo hacer error st.executeUpdate(«select * from persona donde uid =» + id del usuario).

InformationsquelleAutor alessandro | 2012-02-03

4 Comentarios

  1. 5
    ResultSet rs = stmd.executeQuery("select * from person where uid = "+ userid);
    
    while (rs.next()) {
        System.out.println("Name= " + rs.getString(1));
    }
    • Esto tiene el riesgo de inyección de SQL. Usuario Jasonw responder en su lugar.
  2. 7

    Usted debe usar la instrucción prepare como protegerse de la inyección de sql. Usted puede también agregar un sencillo registro de la impresión de la instrucción sql antes de que se ejecuta y por lo que está seguro. A continuación está el ejemplo de la clase, pero siéntase libre de cambio en su situación.

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    
    public class DBAccess
    {
        PreparedStatement pstmt;
        Connection con;
    
        DBAccess() throws Exception
        {
            String dbdriver = "";
            String url = "";
            String username = "";
            String password = "";
    
            Class.forName(dbdriver);
    
            con = DriverManager.getConnection(url, username, password);
        }
    
        public Person getPerson(int userid) throws Exception
        {
            pstmt = con.prepareStatement("select * from person where uid = ?");
            pstmt.setInt(1, userid);
            System.out.println("sql query " + pstmt.toString());
            ResultSet rs = pstmt.executeQuery();
            if (rs.next())
            {
                Person person = new Person();
                person.setName(rs.getString("name"));
                return person;
    
            }
            return null;        
        }
    
    }
  3. 5

    Podría pegar todo el bloque de código acerca de esta cuestión?
    La siguiente es mi sugerencia

    int userid = get user id ;
    Connection connection = get connection ;
    String sql = "select * from person where uid=?";
    PreparedStatement pstmt = connection.prepareStatement(sql);
    pstmt.setInt(1,userid);

    si la base de datos tiene uno o más registro que se uid presentada igual con el id de usuario ,que devuelve el resultado correcto

  4. -1

    int user_id=2003; //también se puede obtener de la variable de entrada

    String sql=»SELECT * FROM empleo DONDE id=»;

    resultSet = instrucción.executeQuery(sql+user_id);

Dejar respuesta

Please enter your comment!
Please enter your name here