首页 > 解决方案 > 如何在 java 中的 con.commit() 之后刷新表?

问题描述

我正在使用 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() 之后,表的 max(ID)=4

但我得到 MAX(ID)=3

有人可以帮我解决这个问题吗?

标签: javasqloracletransactions

解决方案


  1. PreparedStatement如果您没有参数化查询,则不需要。我会Statement在这种情况下使用。

  2. 您不需要while (rs.next()),因为您的查询将返回单个值。我会用if (rs.next()).

  3. 您的查询没有一个名为的字段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); 
    

推荐阅读