1. Java / Говнокод #6813

    +79

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    public boolean ComparePassword(String userName, String ComparablePassword) throws SQLException
        {
            try{
            if(c == null) Connect();
            /*PreparedStatement stmt = c.prepareStatement("SELECT * FROM users WHERE name = ?");*/
            PreparedStatement stmt = c.prepareStatement("SELECT 1 FROM users WHERE name = ? AND password = ?");
    	stmt.setString(1, userName);
            stmt.setString(2, ComparablePassword);
            ResultSet rs = stmt.executeQuery();
            /*String a = rs.getString(3);
            if(ComparablePassword.compareTo(a) == 0) //бл**ь, ну почему в этой *** джаве это не работает? придется как обычно делать через *опу:(
                return true;
            else
            {
                return false;
            }
            */
            if(!rs.next())
                return false;
            else return true;
            }
            catch(SQLException e)
            {
                return false;
            }
        }

    Найдено в недрах исходников одного сайта на Java :)

    Запостил: A1mighty, 02 Июня 2011

    Комментарии (40) RSS

    • Как говаривал некто Крылов: "Неча на зеркало пенять, коли рожа крива"
      Ответить
    • Недавно начал писать информационную систему на курсовую. Java.
      Парню стоит побольше читать.
      Да и if(!rs.next()) return false; - это прикол.
      Вернул бы лучше сам результат rs.next(); чем ахинею городить.
      Вопрос: чем хуже использование String.equals?
      Ответить
      • rs.next() там единицы.
        Ответить
        • Что, простите? Туплю чего-то *чешет репу соседа*
          Ответить
          • SELECT 1 полезной инфы не несет
            Ответить
            • несёт, почему нет? лучше бы конечно EXIST
              Ответить
              • здесь важно только кол-во строчек, 0 или 1 (теоретически может быть и больше).
                если уж обсуждать, то данный метод вообще бесполезен(избыточен). Я бы возвращал сразу инфу о юзере или нулл если не найден.
                Ответить
                • > теоретически может быть и больше
                  не может, иначе это будет не проверка подлинности, а народные гуляния
                  Ответить
                  • сомневаюсь, что name это или primary key, или хотя бы имеет констрейнт unique
                    Ответить
                    • сколько может быть в системе пользователей с логином "vpupkine"?
                      Ответить
                      • Пока ничего не сломается, должно быть не более одного. Но это надо гарантировать.
                        Ответить
                        • Ну, мы подразумеваем, что сущность users описана более-менее правильно, а, следовательно, предусмотрено, что имя пользователя уникально.
                          Поэтому-то если бы он возвращал результат rs.next(), то:
                          true - результирующий набор не пуст (значит есть совпадение пары логин-пароль);
                          false - результирующий набор пуст (либо пользователя с данным именем нет вообще, либо пароли не совпадают).
                          Ответить
    • С исключениями тут конечно же тоже байдень. Компилятор не пустит. Ибо в заголовке функции указано SQLException и все тело функции заключено в try..catch.
      Ответить
      • Пустил же, класс нормально скомпилировался)
        Ответить
        • Мистика NetBeans вчера не пускал такой код, скачал последнюю версию - пускает, в Eclipse все ок. IntelliJIDEA тоже пускает.
          А че бинс раньше не пускал чтоли?
          Йобаная магия.
          Ответить
          • Java же! :)
            Да и НетБинс известен такими штуками, не в первый раз уже.
            Ответить
          • > IntelliJIDEA
            чо-чо? интелли-жидея?
            Ответить
            • Intelli-✡
              Ответить
              • К смертельно больному 108-летнему еврею приходит его 104-летний друг:
                -Ну, Аврам, как здоровье?
                -Плохо, Изя, очень плохо. Думаю, придётся пристать перед Б-гом.
                -Слушай, если он тебя спросит "Что там Изя", "Как там Изя", ты меня не видел, не слышал, и ничего про меня не знаешь!
                Ответить
            • Ну, вы правы.
              Оно именно так и относится к ресурсам.
              Стоимость лицензии:
              99$ - студентам и преподавателям
              199$(249) - для одиноких-одиночек
              499$(599) - компаниям и организациям
              Ответить
    • Млять, ну нахера же в методе SQLException обрабатывать?! Пусть внешний код об этом заботится. Здесь явно больше sql говнокод, а не java, хотя человек как-то умудрился placeholder сюда запихнуть.
      Ответить
      • Ну, как я понимаю "throws SQLException" итак вынудит человека заключать вызов данного метода в конструкцию "тру"...."о, бля, дырка" или опять же указывать throws SQLException в вызывающем методе.
        Так что внешний код будет об этом минимум знать :D
        Ответить
      • Обрабатывать надо хотя бы потому, что вызывающий метод не обязан ничего знать о реализации ComparePassword. Из него бросать SQLException - вообще глупость. Если уж очень нужно исключение, то это должно быть исключение бизнес-уровня (у которого при большом желании можно указать cause). А сам метод может в базу лезть, может в LDAP, ActiveDirectory, да хоть из файла пароль читать. Вызывающему коду на это плевать с высокой колокольни. Он должен знать "правильно/неправильно/не удалось проверить" - true/false/CheckFailedException.
        Ответить
    • Успешность выполнения данного метода больше нужна внешнему модулю, логично ведь?! Обработка исключений лучше воспринимается извне, это как закон, а там уже можно его "обернуть" в другой runtime-fail, яснее будет.
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий