阅读以下代码:
public class selectTable {
public static ResultSet rSet;
public static int total=0;
public static ResultSet onLoad_Opetations(Connection Conn, int rownum,String sql)
{
int rowNum=rownum;
int totalrec=0;
try
{
Conn=ConnectionODBC.getConnection();
Statement stmt = Conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
String sqlStmt = sql;
rSet = stmt.executeQuery(sqlStmt);
total = rSet.getRow();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
System.out.println("Total Number of Records="+totalrec);
return rSet;
}
}
Run Code Online (Sandbox Code Playgroud)
下面的代码不显示实际总数:
total = rSet.getRow();
Run Code Online (Sandbox Code Playgroud)
我的jTable显示4记录在jTable但总计= 0; 当我通过调试评估时,它显示:
total=(int)0;
Run Code Online (Sandbox Code Playgroud)
而不是总数=(int)4如果我使用
rSet=last(); above from the code total = rSet.getRow();
Run Code Online (Sandbox Code Playgroud)
总计显示准确值= 4但rSet什么都不返回.然后jTable是空的.告诉我!
Bot*_* FM 24
BalusC的答案是对的!但我必须根据用户实例变量提及,例如:
rSet.last();
total = rSet.getRow();
Run Code Online (Sandbox Code Playgroud)
然后你失踪了
rSet.beforeFirst();
Run Code Online (Sandbox Code Playgroud)
剩下的代码是一样的,你会得到你想要的结果.
Bal*_*usC 16
ResultSet#beforeFirst()在返回ResultSet对象之前,需要调用将光标放回第一行之前.这样用户就可以使用next()通常的方式.
resultSet.last();
rows = resultSet.getRow();
resultSet.beforeFirst();
return resultSet;
Run Code Online (Sandbox Code Playgroud)
但是,到目前为止给出的代码存在更大的问题.它正在泄漏数据库资源,它也不是一个合适的OOP方法.查找DAO模式.最终你想最终成为
public List<Operations> list() throws SQLException {
// Declare Connection, Statement, ResultSet, List<Operation>.
try {
// Use Connection, Statement, ResultSet.
while (resultSet.next()) {
// Add new Operation to list.
}
} finally {
// Close ResultSet, Statement, Connection.
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,调用者只需List#size()知道记录的数量即可.
| 归档时间: |
|
| 查看次数: |
118182 次 |
| 最近记录: |