【问题标题】:How to retrieve maximum value of a integer column from access database in java program?如何从java程序中的access数据库中检索整数列的最大值?
【发布时间】:2014-06-03 14:01:26
【问题描述】:

我正在用 java swing 开发一个项目“医院管理系统”。现在我有一个文本字段,其值应该在页面加载时增加一。它基本上包含患者 ID 的值。现在我想从数据库中检索最大值或最后一个值并将其加一,并希望在变量为“textField_1”的文本字段中设置该值。这里表名是“患者”,列名是“patid”,这个 sn-p 是在页面加载事件中写入的。选择查询已成功执行,但问题是未从数据库中获取最大值。在 if 块中达到了控制,但它没有打印 if "i" 的值。请帮忙!!

    try
    {
        Connection con;
        Statement st;
        ResultSet rs;

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        con=DriverManager.getConnection("Jdbc:Odbc:hos_man");
        st=con.createStatement();
        rs=st.executeQuery("select * from patient where patid = (select max(patid) from patient);");
        if (rs.next()==true)
        {
            int i=rs.getInt(1);
            i++;
            textField_1.setText(""+i);
        }
        else
        {
            textField_1.setText(""+100);
        }   
        con.close();
        st.close();
        rs.close();
    }
    catch (Exception e)
    {
    }

【问题讨论】:

  • 只使用select max(patid) from patient 有什么问题?此外,这假设 NO-ONE else 将在此查询之后添加新患者...
  • 您的问题是 SQL(似乎不是)还是显示问题?如果有显示,请忽略 SQL 并尝试仅使用 java.xml 来启动它。如果这不起作用,请询问有关此的问题。我的猜测是您的文本字段没有显示它拥有的数据,因为它没有重新绘制/刷新。
  • 另外,你不应该捕获异常然后什么都不做。也许你在rs.getInt(1) 中得到一个异常(因为它不是一个int,也许?你选择所有列,没有顺序,谁知道第一个,可能是名称。)然后你忽略那个异常。至少写e.printStackTrace() 将异常打印到控制台。然后在此处粘贴异常。

标签: java swing


【解决方案1】:

首先,您的查询是正确的,但它是不好的做法。如果您只需要max(patid),请使用此查询:

select max(patid) from patient

然后像下面这样修改你的代码。

try
        {
            Connection con;
            Statement st;
            ResultSet rs;

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con=DriverManager.getConnection("Jdbc:Odbc:hos_man");
            st=con.createStatement();
            rs=st.executeQuery("select max(patid) from patient");
            int i=100;
            while (rs.next())
            {
                i=rs.getInt(1);


            }
            textField_1.setText(""+i); 
            con.close();
            st.close();
            rs.close();
        }
        catch (Exception e)
        {
        e.printStackTrace();
        }

这应该可以工作

【讨论】:

  • 为什么在这里使用whileif 也是这样做的,而且更容易理解,永远不会有第二次通过。
  • 我为什么要这样做?它的作用很清楚。我只是好奇为什么在这种情况下你会使用 while 而不是 if。
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
相关资源
最近更新 更多