【问题标题】:I am trying to extract the last value from a relational table according to a parameter我正在尝试根据参数从关系表中提取最后一个值
【发布时间】:2020-04-24 21:32:21
【问题描述】:

我试图根据参数从关系表中提取最后一个值,它给了我这个错误

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 '1 * FROM version WHERE codeProject = '7' ORDER BY idVersion DESC' 附近使用正确的语法

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;
    }   

}

【问题讨论】:

    标签: java mysql sql database sql-order-by


    【解决方案1】:

    MySQL 不支持 TOP 1,您需要 LIMIT 1 代替 - 它位于查询的末尾,而不是 ORDER BY 子句之后,而不是 SELECT 关键字之后。

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

    请注意,您应该使用参数化语句,而不是将变量转换为查询字符串:这样可以提高查询效率,在必要时处理转义(例如,如果您的参数包含嵌入的引号),并保护您的来自 SQL 注入的代码。

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2017-02-28
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多