Я пытаюсь извлечь последнее значение из реляционной таблицы в соответствии с параметром - PullRequest
1 голос
/ 25 апреля 2020

Я пытаюсь извлечь последнее значение из реляционной таблицы в соответствии с параметром, и это дает мне эту ошибку

com. mysql .jdb c .exceptions.jdbc4.MySQLSyntaxErrorException : У вас ошибка в вашем SQL синтаксисе; обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с '1 * ОТ версии WHERE codeProject =' 7 'ORDER BY idVersion DES C' в строке 1

public class VersionDAO {
    ConexionSQL conectar = new ConexionSQL();
    Connection con;
    PreparedStatement ps;
    ResultSet rs;
    String changeVersion;

    public Version buscarVer(int bus, Proyecto p) {
        String sql = "SELECT TOP 1 id, name FROM version WHERE codeProject = '"+ bus +"' ORDER BY idVersion DESC";

        try {
            con = conectar.getConexionSQL();
            ps=con.prepareStatement(sql);
            rs=ps.executeQuery();
            Version ver = new Version();
            while (rs.next()) {
                ver.setIdversion(rs.getInt(1));
                ver.setNameVersion(rs.getString(2));
                changeVersion = rs.getString(2);
            }       
            return ver;
        } catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }   

}

1 Ответ

1 голос
/ 25 апреля 2020

MySQL не поддерживает TOP 1, вам нужно LIMIT 1 вместо этого - и он идет в конце запроса, скорее после предложения ORDER BY, чем после ключевого слова SELECT.

SELECT id, name 
FROM version 
WHERE codeProject = ? 
ORDER BY idVersion DESC LIMIT 1

Обратите внимание, что вы должны использовать параматизированные операторы, а не добавлять переменную в строку запроса: это делает запрос более эффективным, обрабатывает экранирование при необходимости (т. Е. Если ваш параметр содержит встроенную кавычку, например), и защищает ваш код от SQL инъекции.

...