2013-01-22 78 views
0

我的系統在檢索數據庫中的某些值時遇到問題。我想獲得特定領域的值的總結。這是我的檢索值的代碼:如何檢索COUNT()SUM()AVG()MIN()MAX()語句的結果集?

public void insertToClientSummary(){ 
    sql = "SELECT COUNT(genClientID), SUM(principal), SUM(interest), SUM(totalPayment), SUM(totalBal) FROM client_info"; 
    try { 
     stmt = conn.prepareStatement(sql); 
     rs = stmt.executeQuery(); 
     String titles[] = new String [4]; 
     titles[0] = "Total Clients"; 
     titles[1] = "Total Loan Book"; 
     titles[2] = "Total Interests"; 
     titles[3] = "Total Payment"; 
     titles[4] = "Total Balance"; 
     rs.next(); 
     for (int ctr=0;ctr<=5;ctr++){ 
      String sql2 = "INSERT INTO client_summary (title, sumValues) VALUES ('"+titles[ctr]+"','')"; 
      PreparedStatement stmt2 = conn.prepareStatement(sql2); 
      stmt2.executeUpdate(); 
      ctr++; 
      sql = "UPDATE client_summary SET sumValues = '"+String.valueOf(rs.getDouble(ctr))+"'"; 
      stmt = conn.prepareStatement(sql); 
      stmt.executeUpdate(); 
      ctr--; 
     } 
    } 
    catch(Exception e){ 
     JOptionPane.showMessageDialog(null, "Client Summary Query Exception"); 
    } 
} 

順便說一句,我也包括我的代碼上說client_summary表中插入新值。但我認爲我在第一個查詢中遇到了異常。任何關於正確檢索數據的想法?

+0

什麼是您正在使用的數據庫? – shazin

+0

mysql5和phpMyAdmin是我的DBMS –

回答

3

您可以使用as name(別名)來獲取它們。例如

SELECT COUNT(genClientID) as cnt, ......... 

然後

rs.getString("cnt"); 
+0

這通常稱爲「_alias_」。 – jahroy

+0

@jahroy:是的,謝謝你。更新了答案。 'rs.get(cnt)'中的 – kosa

+0

;'cnt'出現錯誤'找不到符號' 當'cnt'初始化爲String時,則'get'出現錯誤'找不到符號' –

1

您可以使用插入選擇,如果你只是想在彙總表中插入聚合值。 這樣你就不需要結果集迭代。例如

INSERT INTO summary(id,total,max) SELECT count(id),sum(principal),sum(interest) FROM client_info 
0

此解決方案不適用於我。我不知道如果我在SQL查詢中遇到問題,但是如果我在數據庫上運行它,它會返回正確的值。

SELECT ((SUM(Y1) * 20)/60) as heat FROM logger.AcondData where (time > '2013-10-12 0:0:0' and time < '2013-10-12 23:59:59') and Y1 = 1 and Y8 = 0; 

這裏是從ResultSet中獲取。

java.sql.PreparedStatement preparedStatement = mConnection.prepareStatement(query); 
ResultSet resultSet = preparedStatement.executeQuery(); 

while (resultSet.next()) 
{ 
    printWriter.println("<h1>Heating time: " + resultSet.getString("heat") + " minut"); 
} 

EDIT1: 如果我刪除最後兩個條件,它的工作原理。

SELECT ((SUM(Y1) * 20)/60) as heat FROM logger.AcondData where (time > '2013-10-12 0:0:0' and time < '2013-10-12 23:59:59'); 

Y1和Y8是TINYINT(1)

EDIT2: 現在,它的工作,它看起來像這個問題在數據庫中的數據。從遠程數據庫中導入數據後,確定。