我正在用java在表my\ table中创建一个新的寄存器,然后进行查询以获取该表的max(id)。然而,java正在获得上一个。我是说:
mybean.store(con)
con.commit();
pstm = con.prepareStatement("SELECT MAX (ID) FROM MY_TABLE");
rs = pstm.executeQuery();
while (rs.next()){
id = rs.getString("ID");
System.out.println("id: " +id);
}
在con.commit()之前;表的最大值(id)=3
在com.commit()之后,表的最大值(id)=4
但我得到max(id)=3
有人能帮我解决这个问题吗?
2条答案
按热度按时间xyhw6mcr1#
你在做这件事;如果返回了错误的结果,或者您的数据库没有包含您认为它包含的内容,或者您的数据库引擎坏了(mysql经常坏掉,这可能就是问题所在)。修复方法是不使用mysql),否则代码会被破坏。您的代码段包含一个错误(第一行后没有分号),因此这不是直接粘贴而是修改;一般来说,您应该准确地粘贴显示您不了解的行为的代码,因为如果您编辑它或尝试在不运行简化的情况下简化它,您可能会意外地删除可以解释您所观察到的内容的东西。
更一般地说,如果您只需要为自动递增列生成id,那么您就不需要这样做了。你可以用语句
.getGeneratedKeys()
获取这些信息的方法;你可能得过去Statement.RETURN_GENERATED_KEYS
作为你生活的一部分executeUpdate
打电话。bnlyeluc2#
你不需要一个
PreparedStatement
如果没有参数化查询。我会用Statement
在这种情况下。你不需要
while (rs.next())
因为您的查询将返回单个值。我会用if (rs.next())
.您的查询没有名为
ID
因此rs.getString("ID")
将抛出SQLException
. 你应该使用rs.getString(1)
或使用别名(例如。maxId
在下面显示的示例中)。另外,你应该使用getInt
而不是getString
.