Вернуть значение из базы данных (SQLSyntaxErrorException: Unknown column 'admin' in 'where clause)

Есть класс:

@ManagedBean
@SessionScoped
public class Login implements Serializable {
    private static final long serialVersionUID = 1094801825228386363L;
    private String pwd;
    private String msg;
    private String user;
    private String admin_sign;

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getAdmin_sign() {
        return admin_sign;
    }

    public void setAdmin_sign(String admin_sign) {
        this.admin_sign = admin_sign;
    }

    public boolean validate(String user, String password) {
        Connection con = null;
        PreparedStatement ps = null;
        try {
            con = DataConnect.getConnection();
            ps = con.prepareStatement("Select uname, password, admin_sign from Users where uname = ? and password = ? and access_sign = '1'");
            ps.setString(1, user);
            ps.setString(2, password);
            ResultSet rs = ps.executeQuery();

            if (rs.next()) 
            {
                return true;
            }

        } catch (SQLException ex) {
            System.out.println("Login error -->" + ex.getMessage());
            return false;
        } finally {
            DataConnect.close(con);
        }
        return false;
    }    


   public String getAdminSign(String userr) {
       Connection con = null;
        Login log = new Login();

        try {
            con = DataConnect.getConnection();
            Statement stmt = getConnection().createStatement();
            ResultSet rs = stmt.executeQuery("select admin_sign from users where uname = " + (userr));
            rs.next();
            log.setAdmin_sign(rs.getString("admin_sign"));
            System.out.println("log.admin_sign " + log.admin_sign);
            con.close();
        } catch (Exception e) {
            System.out.println("error getAdminSign " + e);
            System.out.println("user " + userr);
        }
        return log.admin_sign;
    }       

}

Как вывести значение в <p:outputLabel value=" #{login.getAdminSign(login.user)} " />? Мне нужно вывести значения поля admin_sign из метода public String getAdminSign(String userr). Выходит ошибка: error getAdminSign java.sql.SQLSyntaxErrorException: Unknown column 'admin' in 'where clause'.


Ответы (1 шт):

Автор решения: default locale

Не стройте запрос через конкатенацию строк, это приводит к сложно уловимым ошибкам (в данном случае, строка admin воспринимается как имя столбца, т.к. указана без кавычек) и к серьезным проблемам безопасности (SQL-инъекции).

Вместо этого используйте запрос с параметром:

...
con = DataConnect.getConnection();
PreparedStatement stmt = con.prepareStatement("select admin_sign from users where uname = ?");
stmt.setString(1, userr);
ResultSet rs = stmt.executeQuery();
...
→ Ссылка