java数据库连接检索

时间:2010-06-27 04:39:01

标签: java swing jdbc

我使用下面的代码以swing形式显示数据库中的记录。但是,当我点击按钮时,它只显示数据库的第一条记录(数据库中的表有5条记录)

private void btnnextActionPerformed(java.awt.event.ActionEvent evt) {                                        
    try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con=DriverManager.getConnection("jdbc:odbc:StudentDetails");
            Statement stm=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            ResultSet rs=stm.executeQuery("Select * from NurseryStDetails");

                if(rs.first())
                {
                    txtstID.setText(rs.getString(1));
                    txtname.setText(rs.getString(2));
                    txtaddress.setText(rs.getString(3));
//                    int i=rs.getInt(4);
//                    String s=String.valueOf(i);
//                    txtage.setText(rs.getString(s));
//                    int j=rs.getInt(5);
//                    String t=String.valueOf(j);
                    txtage.setText(rs.getString(4));
                    txttelephone.setText(rs.getString(5));
                    txtgNIC.setText(rs.getString(6));
                    txtgname.setText(rs.getString(7));
                }
            }
        catch(Exception ex)
            {
                System.out.println("Exception caught"+ex);
            }

    }   

4 个答案:

答案 0 :(得分:3)

是吗

if(rs.first()) ??

while (rs.next())

这将有助于您遍历结果集。

答案 1 :(得分:3)

嗯,你确实已经编写了这样的代码。以下是ResultSet#first() true的引用:

  

将光标移动到此ResultSet对象的第一行。

     

如果光标在有效行上,则返回 false; while如果结果集中没有行。

你看,它只是将光标移动到第一行。没什么。

您基本上需要在while (rs.next()) { // ... } 循环中将其替换为Javadoc。只要有一行,它就会遍历所有行。

Class#forName()

但还有另一个问题。如果您只更改 ,那么代码最终只会显示 last 行的数据,因为您正在重复使用相同的每次的文本组件。您希望在UI的新字段中单独显示每一行。我不做Swing,所以我不能从头脑中给出详细的答案,但我至少知道你想使用ResultSet#next()来做这件事。

另见:


也就是说,您的代码中还存在其他问题。

  1. 每次调用close()都是不必要的。在应用程序启动期间只需一次即可。
  2. ResultSet块内的StatementConnectionfinally中不调用ex会导致资源泄露。如果你长期继续运行它,数据库迟早会用完连接,你的应用程序将无法再连接它并中断。相应地修复它。
  3. 仅打印ex.printStackTrace()并不能提供有价值的信息。它只会打印异常类型和消息,这在调试过程中不是很有用。您想改为{{1}}。

答案 2 :(得分:1)

如果(rs.first())

检查您是否在结果集中的第一条记录

答案 3 :(得分:1)

可以将JDBC ResultSet对象指向正在执行的查询的结果行的开始之前的位置。 第一个 rs.next()使其指向返回的第一行。对 rs.next()的后续调用会在结果行中向前移动。 因此,要显示所有结果,请使用概念

while(rs.next()){
  //use rs to get the details of the current row.
}

如果下一行存在,则rs.next()返回true。