2013-10-01 78 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