programing tip

Java에서 ResultSet이 리턴 한 행 수 가져 오기

itbloger 2020. 12. 10. 19:08
반응형

Java에서 ResultSet이 리턴 한 행 수 가져 오기


ResultSet특정 수의 행을 반환 하는 a 사용했습니다 . 내 코드는 다음과 같습니다.

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

에 의해 반환 된 행 수를 확인하는 방법이 ResultSet있습니까? 아니면 직접 작성해야합니까?


do ... while루프 대신 루프를 사용할 수 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");
}

먼저 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();
    ...
}

그런 다음 변수에는 SQL이 반환하는 행 수가 포함됩니다.


간단한 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이며이 메서드를 사용하면 예외가 발생합니다.


ResultSet에서 0 행 또는 일부 행을 구별하는 또 다른 방법 :

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

res.next()메소드는 포인터를 다음 행으로 가져갑니다. 코드에서 두 번 사용하고 있습니다. 첫 번째는 if 조건 (커서가 첫 번째 행으로 이동)에 대한 다음 while 조건 (커서가 두 번째 행으로 이동)에 대해 사용됩니다.

따라서 결과에 액세스하면 두 번째 행에서 시작됩니다. 따라서 결과에서 한 행을 적게 표시합니다.

당신은 이것을 시도 할 수 있습니다 :

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

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을 쉽게 수정할 수 있습니다.


        rs.last();
        int rows = rs.getRow();
        rs.beforeFirst();

You could load the ResultSet into a TableModel, then create a JTable that uses that TableModel, and then use the table.getRowCount() method. If you are going to display the result of the query, you have to do it anyway.

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

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());

first line of code says that we can move anywhere in the resultset( either to first row or last row or before first row without the need to traverse row by row starting from first row which is time taking).second line of code fetches the records matching the query here i am assuming (25 records), third line of code moves cursor to last row and final line of code gets the current row number which is 25 in my case. if there are no records, rs.last returns 0 and getrow moves cursor to before first row hence returning negative value indicates no records in db


this my solution

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

If your query is something like this SELECT Count(*) FROM tranbook, then do this rs.next(); System.out.println(rs.getInt("Count(*)"));


You can use res.previous() as follows:

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

참고URL : https://stackoverflow.com/questions/8292256/get-number-of-rows-returned-by-resultset-in-java

반응형