SQL 语句 returns 一个空的结果集 table
SQL statement returns a resultset on an empty table
String sql = "Select MAX(ORDERLINEID) From ORDERLINESTABLE";
ResultSet rst;
rst = stmt.executeQuery(sql);
if(rst.next())
{
next = rst.getInt("ORDERLINEID");
next++;
}
我的数据库中有一个名为 ORDERLINESTABLE 的 table 当前是空的。我有 运行 上面的代码,目的是获取存储在 ORDERLINEID 列中的最大整数,允许我在向数据库添加项目时增加它。
我希望这个查询 return 什么都没有,因为 table 是空的但是在调试时我注意到 return 对 rst.next() 的搜索是正确的方法。
有人知道为什么会这样吗?我查看了 resultset.next() 文档,据我所知,它应该 return false.
如有疑问,请查看您的数据。这是来自任何数据库引擎的示例查询。
select max(field) maxValue
from table
where 1=3
它会产生
maxValue
Null
换句话说,您的查询返回了一条值为 null 的记录。
把数据库填写的ORDERLINEID取到INSERT语句之后就好很多了。将列 ORDERLINEID 设为 INT AUTOINCREMENT 类型。
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 的情况很多:
- 第一SELECT
- 秒SELECT
- 新 ID 的第二个增量
- 新 ID 的第一次增量
- 先插入
- 第二次插入
String sql = "Select MAX(ORDERLINEID) From ORDERLINESTABLE";
ResultSet rst;
rst = stmt.executeQuery(sql);
if(rst.next())
{
next = rst.getInt("ORDERLINEID");
next++;
}
我的数据库中有一个名为 ORDERLINESTABLE 的 table 当前是空的。我有 运行 上面的代码,目的是获取存储在 ORDERLINEID 列中的最大整数,允许我在向数据库添加项目时增加它。
我希望这个查询 return 什么都没有,因为 table 是空的但是在调试时我注意到 return 对 rst.next() 的搜索是正确的方法。
有人知道为什么会这样吗?我查看了 resultset.next() 文档,据我所知,它应该 return false.
如有疑问,请查看您的数据。这是来自任何数据库引擎的示例查询。
select max(field) maxValue
from table
where 1=3
它会产生
maxValue
Null
换句话说,您的查询返回了一条值为 null 的记录。
把数据库填写的ORDERLINEID取到INSERT语句之后就好很多了。将列 ORDERLINEID 设为 INT AUTOINCREMENT 类型。
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 的情况很多:
- 第一SELECT
- 秒SELECT
- 新 ID 的第二个增量
- 新 ID 的第一次增量
- 先插入
- 第二次插入