Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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 使用JDBC返回MYSQL中最后一行的整数_Java_Mysql_Jdbc - Fatal编程技术网

Java 使用JDBC返回MYSQL中最后一行的整数

Java 使用JDBC返回MYSQL中最后一行的整数,java,mysql,jdbc,Java,Mysql,Jdbc,我不熟悉使用JDBC命令。我在MYSQL中有一个数据库,每个条目都有一个ID。最初创建的ID只是一个静态变量,我在构造函数运行时迭代了它。在我开始删除条目或再次运行程序之前,这一切都是正常的。然后我开始受到碰撞。我需要一种方法来返回表中最高的行,并将其分配给一个可以迭代的整数 查询从表中选择MAX(ID)似乎得到了我要查找的值。但我不确定将该值转换为整数以便返回它的语法 public int getHighestRow() { PreparedStatement ps;

我不熟悉使用JDBC命令。我在MYSQL中有一个数据库,每个条目都有一个ID。最初创建的ID只是一个静态变量,我在构造函数运行时迭代了它。在我开始删除条目或再次运行程序之前,这一切都是正常的。然后我开始受到碰撞。我需要一种方法来返回表中最高的行,并将其分配给一个可以迭代的整数

查询
从表中选择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)正是我所需要的。非常感谢。