String sql = "Select MAX(ORDERLINEID) From ORDERLINESTABLE";
ResultSet rst;
rst = stmt.executeQuery(sql);
if(rst.next())
{
next = rst.getInt("ORDERLINEID");
next++;
}
我的数据库中有一个名为ORDERLINESTABLE的表,该表当前为空。我运行上面的代码,目的是获取存储在ORDERLINEID列中的最高整数,允许我在向数据库添加项目时增加它。
我希望这个查询不返回任何内容,因为表是空的但是在调试时我发现搜索对于rst.next()方法返回true。
有谁知道为什么会这样?我查看了resultset.next()文档,据我所知,它应该返回false。
答案 0 :(得分:2)
如有疑问,请查看您的数据。以下是来自任何数据库引擎的示例查询。
If(selectCoffee){
//Code here if coffee selected
}
它会产生
select max(field) maxValue
from table
where 1=3
换句话说,您的查询返回一条值为null的记录。
答案 1 :(得分:1)
在INSERT语句之后获取由数据库填充的ORDERLINEID要好得多。创建INT AUTOINCREMENT类型的ORDERLINEID列。
String sql = "INSERT INTO ORDERLINESTABLE(xxx, yyy) VALUES (?, ?)";
try (PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
stmt.setString(1, xxx);
stmt.setInt(2, yyy);
int updateCount = stmt.executeUpdate(); // 1
try (ResultSet id = stmt.getGeneratedKeys()) {
if (id.next()) { // 'if' as just 1 row inserted.
int orderLineId = id.getInt(1); // 1 key per row.
}
}
}
Java具有一种独立于数据库的方式来获取INSERT生成的密钥。在多用户环境中,这比之后或之前使用MAX更安全。
多用户环境中错误ID的方案很多: