我刚开始使用JDBC命令。我在MYSQL中有一个数据库,每个条目都有一个ID。在最初创建时,ID只是我在构造函数运行时迭代的静态变量。这是好的,直到我开始删除条目或第二次运行程序。然后我开始发生碰撞。我需要一种方法来返回表中的最高行并将其分配给我可以迭代的整数。
查询SELECT MAX(ID) FROM table
似乎得到了我正在寻找的价值。但是我不确定将该值转换为整数的语法,所以我可以返回它。
public int getHighestRow() {
PreparedStatement ps;
int highestID = 0;
try {
ps = getSQLDB().prepareStatement("SELECT MAX(studentID) FROM student");
ps.execute();
} catch (SQLException e){
Logger.getLogger(Undergraduate.class.getName()).log(Level.SEVERE, null, e);
}
if (highestID > 0) return highestID;
else return 0;
我觉得这很简单,但我找不到现有的答案。或者是否有更优雅的方式来做到这一点?
答案 0 :(得分:3)
不同提供程序的SQL以不同方式解决自动生成密钥的检索问题。 JDBC提供了标准解决方案。
更好地使用此JDBC解决方案,因为它可以防止在插入同时完成时混合这些键。
try (PreparedStatement ps = getSQLDB().prepareStatement(
"INSERT INTO student(....) VALUES(?, ..., ?)",
Statement.RETURN_GENERATED_KEYS)) { // Without StudentId
ps.setString(1, name);
...
ps.executeUpdate();
try (ResultSet rsKeys = ps.getGeneratedKeys()) {
if (rsKeys.next()) { // Only one record inserted
int studentId = rsKeys.getInt(1); // One key generated
}
}
} catch (SQLException e){
Logger.getLogger(Undergraduate.class.getName()).log(Level.SEVERE, null, e);
}
try(...)
的机制。 try-with-resources,确保自动调用close。