Java 使用JDBC返回MYSQL中最后一行的整数
我不熟悉使用JDBC命令。我在MYSQL中有一个数据库,每个条目都有一个ID。最初创建的ID只是一个静态变量,我在构造函数运行时迭代了它。在我开始删除条目或再次运行程序之前,这一切都是正常的。然后我开始受到碰撞。我需要一种方法来返回表中最高的行,并将其分配给一个可以迭代的整数 查询Java 使用JDBC返回MYSQL中最后一行的整数,java,mysql,jdbc,Java,Mysql,Jdbc,我不熟悉使用JDBC命令。我在MYSQL中有一个数据库,每个条目都有一个ID。最初创建的ID只是一个静态变量,我在构造函数运行时迭代了它。在我开始删除条目或再次运行程序之前,这一切都是正常的。然后我开始受到碰撞。我需要一种方法来返回表中最高的行,并将其分配给一个可以迭代的整数 查询从表中选择MAX(ID)似乎得到了我要查找的值。但我不确定将该值转换为整数以便返回它的语法 public int getHighestRow() { PreparedStatement ps;
从表中选择MAX(ID)
似乎得到了我要查找的值。但我不确定将该值转换为整数以便返回它的语法
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;
我觉得这很简单,但我无法找到一个现有的答案。或者通常有更优雅的方法来实现这一点吗?不同提供者的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(…)
的机制。请尝试使用资源,确保自动调用close。不同提供程序的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(…)
的机制。尝试使用资源,确保自动调用close。。您应该让数据库为您生成ID,而不是使用静态变量。使用自动递增列或数据库序列。一旦您有两个程序同时使用数据库,您的技术就会失败。@JBNizet这似乎是我的答案。@JBNizet我知道您是在鼓励学习和研究,但这不是公司生产级别的工作。这是一个实践,是一个实验室环境中的独立程序。我花了6个小时阅读和研究来解决这个问题。不过,我非常感谢您的意见,我知道下次我要的是一个鞋号,而不是优雅的,因为这才是我真正想要的。。您应该让数据库为您生成ID,而不是使用静态变量。使用自动递增列或数据库序列。一旦您有两个程序同时使用数据库,您的技术就会失败。@JBNizet这似乎是我的答案。@JBNizet我知道您是在鼓励学习和研究,但这不是公司生产级别的工作。这是一个实践,是一个实验室环境中的独立程序。我花了6个小时阅读和研究来解决这个问题。不过,我非常感谢您的意见,我知道下次我要的是鞋号,而不是优雅,因为这才是我真正想要的。rs.getInt(1)正是我所需要的。非常感谢。rs.getInt(1)正是我所需要的。非常感谢。