行结果集getRow方法的总数

Sha*_*oor 19 java jdbc

阅读以下代码:

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()知道记录的数量即可.


How*_*ard 0

getRow()方法在查询后始终会产生 0:

结果集.getRow()

检索当前行号。

其次,你输出totalrec但不给它分配任何东西。