web-dev-qa-db-ja.com

JavaのResultSetによって返された行数を取得

特定の行数を返すResultSetを使用しました。私のコードは次のようなものです:

ResultSet res = getData();
if(!res.next())
{
    System.out.println("No Data Found");
}
while(res.next())
{
    // code to display the data in the table.
}

ResultSetによって返される行数を確認する方法はありますか?または、自分で書く必要がありますか?

57
Kiran

whileループの代わりにdo ... whileループを使用すると、次のように、ループの実行後にrs.next()が呼び出されます。

if (!rs.next()) {                            //if rs.next() returns false
                                             //then there are no rows.
    System.out.println("No records found");

}
else {
    do {
        // Get data from the current row and use it
    } while (rs.next());
}

または、行を自分で取得しながらカウントします。

int count = 0;

while (rs.next()) {
    ++count;
    // Get data from the current row and use it
}

if (count == 0) {
    System.out.println("No records found");
}
53
Jesper

まず、コマンドでカーソルを移動できるStatementを作成する必要があります。

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

次に、以下のようにResultSetを取得します。

ResultSet rs = stmt.executeQuery(...);

カーソルを最新の行に移動して取得します。

if (rs.last()) {
    int rows = rs.getRow();
    // Move to beginning
    rs.beforeFirst();
    ...
}

次に、rows変数には、SQLによって返される行の数が含まれます

68
Tu Tran

単純なgetRowCountメソッドは次のようになります。

private int getRowCount(ResultSet resultSet) {
    if (resultSet == null) {
        return 0;
    }
    try {
        resultSet.last();
        return resultSet.getRow();
    } catch (SQLException exp) {
        exp.printStackTrace();
    } finally {
        try {
            resultSet.beforeFirst();
        } catch (SQLException exp) {
            exp.printStackTrace();
        }
    }
    return 0;
}

このメソッドはスクロールセンシティブなresultSetを必要とすることに注意してください。そのため、接続の作成中にスクロールオプションを指定する必要があります。デフォルトはFORWARDで、このメソッドを使用すると例外がスローされます。

26
mprabhat

0行またはResultSetの一部の行を区別する別の方法:

ResultSet res = getData();

if(!res.isBeforeFirst()){          //res.isBeforeFirst() is true if the cursor
                                   //is before the first row.  If res contains
                                   //no rows, rs.isBeforeFirst() is false.

    System.out.println("0 rows");
}
else{
    while(res.next()){
        // code to display the rows in the table.
    }
}

ResultSetが与えられた行の数を知る必要がある場合、それを取得するメソッドは次のとおりです。

public int getRows(ResultSet res){
    int totalRows = 0;
    try {
        res.last();
        totalRows = res.getRow();
        res.beforeFirst();
    } 
    catch(Exception ex)  {
        return 0;
    }
    return totalRows ;    
}
7
Fathah Rehman P

res.next()メソッドは、次の行へのポインターを取得します。コードでは、最初にif条件(カーソルが最初の行に移動する)、次にwhile条件(カーソルが2番目の行に移動する)で2回使用しています。

そのため、結果にアクセスすると、2行目から始まります。そのため、結果で1行少なく表示されます。

これを試すことができます:

if(!res.next()){ 
    System.out.println("No Data Found");  
}
else{
    do{
       //your code
    } 
    while(res.next());
}
6
gprathour

Sqlでカウントし、次のように結果セットから回答を取得できます。

Statment stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
                                     ResultSet.CONCUR_READ_ONLY);
ResultSet ct = stmt.executeQuery("SELECT COUNT(*) FROM [table_name]");
if(ct.next()){
   td.setTotalNumRows(ct.getInt(1));
}

ここではすべてをカウントしていますが、基準に基づいてカウントするようにSQLを簡単に変更できます。

4
Emmanuel John
        rs.last();
        int rows = rs.getRow();
        rs.beforeFirst();
3

ResultSetをTableModelにロードし、そのTableModelを使用するJTableを作成してから、table.getRowCount()メソッドを使用できます。クエリの結果を表示する場合は、とにかくそれを行う必要があります。

ResultSet resultSet;
resultSet = doQuery(something, somethingelse);
KiransTableModel myTableModel = new KiransTableModel(resultSet);
JTable table = new JTable(KiransTableModel);
int rowCount;
rowCount = table.getRowCount;
0
bsdarby

これは私の解決策

 ResultSet rs=Statement.executeQuery("query");

    int rowCount=0;


    if (!rs.isBeforeFirst()) 
      {

           System.out.println("No DATA" );
        } else {
            while (rs.next()) {
                rowCount++; 
            System.out.println("data1,data2,data3...etc..");
            }
            System.out.println(rowCount);
            rowCount=0;
            rs.close();
            Statement.close();
      }
0
Yusuf Kalsen
Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=st.executeQuery("select * from emp where deptno=31");
rs.last();
System.out.println("NoOfRows: "+rs.getRow());

コードの最初の行は、結果セット内の任意の場所に移動できることを示しています(最初の行から最後の行、または最初の行の前に移動することができます)ここでクエリに一致すると(25レコード)、コードの3行目がカーソルを最後の行に移動し、コードの最終行が現在の行番号を取得します(私の場合は25です)。レコードがない場合、rs.lastは0を返し、getrowはカーソルを最初の行の前に移動します。したがって、負の値を返すと、dbにレコードがないことを示します。

0
pradeep kumar

クエリがこのSELECT Count(*) FROM tranbookのようなものである場合、これを行うrs.next(); System.out.println(rs.getInt("Count(*)"));

0
Rkmr039