java - 我正在尝试根据参数从关系表中提取最后一个值
问题描述
我正在尝试根据参数从关系表中提取最后一个值,它给了我这个错误
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;
}
}
解决方案
MySQL 不支持TOP 1
,您需要LIMIT 1
代替 - 它位于查询的末尾,而不是在ORDER BY
子句之后,而不是在SELECT
关键字之后。
SELECT id, name
FROM version
WHERE codeProject = ?
ORDER BY idVersion DESC LIMIT 1
请注意,您应该使用参数化语句,而不是将变量转换为查询字符串:这使查询更高效,在必要时处理转义(例如,如果您的参数包含嵌入式引号),并保护您的代码免受 SQL注射。
推荐阅读
- firebase - get() 和 getAfter() 之间的 Firebase 安全规则差异
- python - tkinter 画布未绘制顶部和左侧线
- javascript - 如何将弹出式浏览器窗口置于最前面,使其位于所有浏览器窗口之上?
- amazon-web-services - 如何修复“使用这些代码失败的健康检查:”在 elasticbeanstalk 实例上?
- python - For 循环覆盖先前的结果
- c - 通过 fgets 从 txt 文件中检索到的部分文本在 c 中丢失了
- ios - 检测更改文本的键盘组合
- kotlin - 使用 remoteMessage.notification.body 的实际有效负载时,smallIcon 是圆形灰色斑点
- javascript - Javascript将blob添加到html输入值
- python - Django:如何检查呈现模板的视图