我使用下面的代码以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);
}
}
答案 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()
来做这件事。
也就是说,您的代码中还存在其他问题。
close()
都是不必要的。在应用程序启动期间只需一次即可。ResultSet
块内的Statement
,Connection
和finally
中不调用ex
会导致资源泄露。如果你长期继续运行它,数据库迟早会用完连接,你的应用程序将无法再连接它并中断。相应地修复它。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。