Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL查询用于从mysql数据库返回最新的ID,而不是返回99999_Java_Mysql_Sql - Fatal编程技术网

Java SQL查询用于从mysql数据库返回最新的ID,而不是返回99999

Java 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

我的服务器将从数据库中检索最新的ID,现在它被卡住并不断返回ID
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)
?这正是我所需要的,现在我知道它是按词法排序的,这很有意义。