总行数 结果集 getRow 方法

2022-09-01 22:04:56

阅读以下代码:

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;
    }

}

folowing 代码 dos 不显示实际的总计:

total = rSet.getRow();

我的jTable在jTable中显示4条记录,但总数= 0;当我通过调试进行评估时,它显示:

total=(int)0; 

而不是 total=(int)4 如果我使用

rSet=last(); above from the code  total = rSet.getRow();

则 total 显示准确值 = 4,但 rSet 不返回任何内容。则 jTable 为空。更新我!


答案 1

BalusC的答案是正确的!但是我必须根据用户实例变量提及,例如:

rSet.last(); 
total = rSet.getRow();

然后你错过了什么

rSet.beforeFirst();

剩余的代码是相同的,您将获得所需的结果。


答案 2

在返回对象之前,您需要调用 ResultSet#beforeFirst() 将游标放回第一行之前。这样,用户将能够使用通常的方式。ResultSetnext()

resultSet.last();
rows = resultSet.getRow();
resultSet.beforeFirst();
return resultSet;

但是,到目前为止,您给出的代码存在更大的问题。它泄漏了数据库资源,也不是一个合适的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;
}

这样,调用方只需使用即可了解记录数。List#size()


推荐