2013-10-01 32 views
-1

请帮助!!!!!!! 在数据库我有2行与此查询。获得结果集的行数


SELECT D.DEALER_CODE 
FROM SCOTT.T_DEALERSHIP D,SCOTT.T_DEALER_BILLING DB 
WHERE D.DEALER_CODE = DB.DEALER_CODE 
    AND DEALER_NAME LIKE 'XTIME%' 
    AND (RNR_CUST_NUM = '546' OR RNR_CUST_NUM = '43356'OR RNR_CUST_NUM = '7637055' OR RNR_CUST_NUM ='7637055' OR RNR_CUST_NUM IS NULL) 
    AND (RCI_STORE_NUMBER IS NULL OR RCI_STORE_NUMBER = '05') 
    AND (RCI_AREA_NUMBER = '01'OR RCI_AREA_NUMBER IS NULL) 
    AND (RCI_DEALER_NUMBER IS NULL AND DEALER_Address1 LIKE UPPER('1500 ORACLE%')         
    AND DEALER_CITY =UPPER('BAKERSFIELD') AND DEALER_ZIP LIKE'6%') 

下面的代码,我只得到1行的时候有2条记录在数据库中。当数据库中只有一条记录时,只有一条记录有效,但当有更多记录时不起作用。另外rs.last()方法被跳过并退出结果集。我必须评论它执行一条记录。我不想使用COUNT

ResultSet rs = stmt.executeQuery(sql1); 
System.out.println("" + sql1); 

while(rs.next()) { 
    rs.last(); 
    int Rows = rs.getRow(); 
    System.out.println("Rows are " + Rows); 
} 
+2

'最后()'状态:'object.'你想光标移动到最后一行到此ResultSet? –

+0

不,如果它不给我预期的结果,我不想。我只需要从数据库中记录数据。如果它是0/1 /大于1.如果我评论它执行程序,但是当有多条记录时不会给我正确的计数。 – user2805281

+3

为什么不做一个计数?这正是你需要的。因此,如果您的查询匹配了一百万行,您想要将所有百万个数据返回给您的应用程序,只需计算它们的数量? – Brandon

回答

0

如果你想要做的就是在统计数据库中的记录,那么你真的应该使用形式SELECT count(*) FROM ...的查询。如果你真的需要执行查询你上面列出的方式,那么你想设置一个计数器变量您while循环之外,像这样:

int rowNum = 0; 
while (rs.next()) { 
    rowNum++; 
} 
System.out.println("Number of records: "+rowNum); 
+0

我试过了这一个太..不幸运:(int rowcount = 0; while(rs.next()){ String DealerCode = rs.getString(“DEALER_CODE”); System.out.println(“Dealer Code”+ (行数== 1){ stmt.getConnect上(); *** upda – user2805281

+0

如果您想在每次迭代中执行代码,则可能需要更新您的问题以反映该问题。然而,在快速检查中,如果您想要返回的第一行执行“if(Rows == 1)”位,则需要a)使用'++ rowcount'设置'Rows'而不是'rowcount ++'或b)直接使用count变量,而不是在每次迭代中重置它:'rowcount ++; if(rowcount == 1){...}'。 – Josh

0

我强烈反对通过JDBC返回所有的数据到Java刚确定行数。如果你只是想知道有多少行符合条件,然后做一个SELECT COUNT(*)查询:

在SQL:

SELECT COUNT(*) 
FROM SCOTT.T_DEALERSHIP D,SCOTT.T_DEALER_BILLING DB 
WHERE D.DEALER_CODE = DB.DEALER_CODE 
    AND DEALER_NAME LIKE 'XTIME%' 
    AND (RNR_CUST_NUM = '546' OR RNR_CUST_NUM = '43356'OR RNR_CUST_NUM = '7637055' OR RNR_CUST_NUM ='7637055' OR RNR_CUST_NUM IS NULL) 
    AND (RCI_STORE_NUMBER IS NULL OR RCI_STORE_NUMBER = '05') 
    AND (RCI_AREA_NUMBER = '01'OR RCI_AREA_NUMBER IS NULL) 
    AND (RCI_DEALER_NUMBER IS NULL AND DEALER_Address1 LIKE UPPER('1500 ORACLE%') 
    AND DEALER_CITY =UPPER('BAKERSFIELD') AND DEALER_ZIP LIKE'6%') 

然后在Java中:

ResultSet rs = stmt.executeQuery(sql1); 
System.out.println("" + sql1); 

int rows = 0; 
if(rs.next()) { 
    rows = rs.getInt(); 
} 
System.out.println("Rows are " + rows); 

编辑基于OP的评论

要从数据库除了计数以外的值,只需扫描值。

SQL:

SELECT D.DEALER_CODE 
FROM SCOTT.T_DEALERSHIP D,SCOTT.T_DEALER_BILLING DB 
WHERE D.DEALER_CODE = DB.DEALER_CODE 
    AND DEALER_NAME LIKE 'XTIME%' 
    AND (RNR_CUST_NUM = '546' OR RNR_CUST_NUM = '43356'OR RNR_CUST_NUM = '7637055' OR RNR_CUST_NUM ='7637055' OR RNR_CUST_NUM IS NULL) 
    AND (RCI_STORE_NUMBER IS NULL OR RCI_STORE_NUMBER = '05') 
    AND (RCI_AREA_NUMBER = '01'OR RCI_AREA_NUMBER IS NULL) 
    AND (RCI_DEALER_NUMBER IS NULL AND DEALER_Address1 LIKE UPPER('1500 ORACLE%') 
    AND DEALER_CITY =UPPER('BAKERSFIELD') AND DEALER_ZIP LIKE'6%') 

的Java:

ResultSet rs = stmt.executeQuery(sql1); 
System.out.println("" + sql1); 

List<String> rows = new ArrayList<String>(); 
while(rs.next()) { 
    rows.add(rs.getString()); 
} 
System.out.println("There are " + rows.size() + " rows."); 
+0

最初我用count。但是我也需要从DB - Dealer_Code。(rs.getString(“DEALER_CODE”)获得这个值。如果我使用count,我可能无法获得这一列。请帮助 – user2805281

+0

恩,那不是你发布的代码。如果您需要这些值并且您需要计数,只需在0处启动一个计数器并在迭代时递增。或者,在最后检查集合的大小。 – Brandon

+0

更新了解决方案以满足您的两个要求 – Brandon