sql—在java中con.commit()之后如何刷新表?

2izufjch  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(241)

我正在用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
有人能帮我解决这个问题吗?

xyhw6mcr

xyhw6mcr1#

你在做这件事;如果返回了错误的结果,或者您的数据库没有包含您认为它包含的内容,或者您的数据库引擎坏了(mysql经常坏掉,这可能就是问题所在)。修复方法是不使用mysql),否则代码会被破坏。您的代码段包含一个错误(第一行后没有分号),因此这不是直接粘贴而是修改;一般来说,您应该准确地粘贴显示您不了解的行为的代码,因为如果您编辑它或尝试在不运行简化的情况下简化它,您可能会意外地删除可以解释您所观察到的内容的东西。
更一般地说,如果您只需要为自动递增列生成id,那么您就不需要这样做了。你可以用语句 .getGeneratedKeys() 获取这些信息的方法;你可能得过去 Statement.RETURN_GENERATED_KEYS 作为你生活的一部分 executeUpdate 打电话。

bnlyeluc

bnlyeluc2#

你不需要一个 PreparedStatement 如果没有参数化查询。我会用 Statement 在这种情况下。
你不需要 while (rs.next()) 因为您的查询将返回单个值。我会用 if (rs.next()) .
您的查询没有名为 ID 因此 rs.getString("ID") 将抛出 SQLException . 你应该使用 rs.getString(1) 或使用别名(例如。 maxId 在下面显示的示例中)。另外,你应该使用 getInt 而不是 getString .

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT MAX(ID) AS maxId FROM MY_TABLE");
int id = Integer.MIN_VALUE;
if (rs.next()) {
    id = rs.getInt(1);  
    //id = rs.getInt("maxId");  
}
System.out.println(id);

相关问题