我有一个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");
}
}
答案 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"));