如何将自动递增的ID值检索到JLabel

时间:2016-11-04 06:47:33

标签: java mysql

我有一个mysql数据库,它作为Book Id(当我添加数据时自动递增)和其他行。我已经编写了一个代码来将增加的值赋予jLabel并且它也能正常工作但仍然存在一个小问题。假设我输入了5本书的详细信息。因此,当我按下“保存”按钮(将详细信息保存到数据库)时,它会成功保存,jLabel将增加的值显示为6(因此工作正常)。

现在的问题是,每次我关闭我的应用程序并重新启动它时,jLabel都会将值显示为1.然后,当我保存另一本书的详细信息时,它会跳到7号(这是正确的自动递增ID)。但是,当我重新启动应用程序时,为什么将ID显示为1?即使我重新启动它也应该读7。这是代码示例。我甚至在类Constructor中调用它。但它似乎没有更新。 :(

private void autoGenerateId() {
    if (true) {
        try {
            ResultSet result = new JDBC().getData("SELECT * FROM newbookstock");
            if (!result.next()) {
                jLabel5.setText("1");
            } else {
                ResultSet result2 = new JDBC().getData("SELECT LAST_INSERT_ID() AS bookid FROM newbookstock");
                if (result2.next()) {
                    int id = result2.getInt("bookid") + 1;
                    String ss = String.valueOf(id);
                    jLabel5.setText(ss);
                } else {
                    System.out.println("OOOOO");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        System.out.println("Set focus to Jtext1");
    }
}

1 个答案:

答案 0 :(得分:0)

让我们消化您的代码。

        ResultSet result = new JDBC().getData("SELECT * FROM newbookstock");
        if (!result.next()) {

如果表为空,则此if条件将评估为false。所以这不是你将标签设置为1

的地方
} else {
                ResultSet result2 = new JDBC().getData("SELECT LAST_INSERT_ID() AS bookid FROM newbookstock");

啊,但是当你第一次启动程序时,你会得到什么? 0.为什么因为您没有使用当前连接向表中插入任何值。

你应该做的是

 SELECT COUNT(*) FROM newbookstock

你在哪里

 SELECT * FROM newbookstoc

或者你可能想要MAX(id)而不是count(*)但是select * is definitelly不是你应该使用的。

并将该值用作初始值。在其他新闻中,你有

new JDBC().getData(...)

在两个地方。你不应该像这样打开多个连接。打开连接一次并重复使用。

更新:您设置初始值的代码段可能如下所示:

        JDBC conn = new JDBC();
        ResultSet result = jdbc.getData("SELECT COUNT(*) as C FROM newbookstock");
        jLabel5.setText(result2.getString("C"));