Java SQL查询用于从mysql数据库返回最新的ID,而不是返回99999
我的服务器将从数据库中检索最新的ID,现在它被卡住并不断返回IDJava SQL查询用于从mysql数据库返回最新的ID,而不是返回99999,java,mysql,sql,Java,Mysql,Sql,我的服务器将从数据库中检索最新的ID,现在它被卡住并不断返回ID99999,即使最新的ID现在是100040 我的代码是: String insertTable = "SELECT * FROM dutyofcare ORDER BY Id DESC LIMIT 1"; ps = conn.prepareStatement(insertTable); rs = ps.executeQuery(); String ResultS = ""; if (rs.next()) { ResultS
99999
,即使最新的ID现在是100040
我的代码是:
String insertTable = "SELECT * FROM dutyofcare ORDER BY Id DESC LIMIT 1";
ps = conn.prepareStatement(insertTable);
rs = ps.executeQuery();
String ResultS = "";
if (rs.next()) {
ResultS += rs.getString("Id");
}
问题在于,查询中的ORDER BY正在进行词法(逐字符)排序,其中9总是在1之后,而不是处理数字位置的数字排序。这是因为ID的列类型。在排序之前,您需要确保ID是一个数字 将ID更改为数字列类型并运行以下查询:
从dutyofcare中选择MAX(ID)代码>
或者,如果要保留列类型(效率低于上述选项):
从dutyofcare中选择MAX(cast(ID为UNSIGNED))代码>
或者,如果您希望保留列类型并修复现有查询(所有选项中效率最低的)
select*from dutyofcare order by CAST(ID为UNSIGNED)desc limit 1代码>
所有这些方法基本上都将ID视为数字,并选择最大值。是的,因为它进行的是词汇排序,而不是数字排序。我猜你的ID列是char类型的?它从1-99999开始工作,我如何更改它以返回最新的ID?它是varchar,修复此问题的最佳方法是什么?我应该把它改成int吗?为什么它是一个varchar,当你清楚地在里面存储数字的时候?另外,与其做这样复杂的查询,为什么不使用dutyofcare中的SELECT MAX(id)
?这正是我所需要的,现在我知道它是按词法排序的,这很有意义。