-1

これらの行を単純化するにはどうすればよいですか。各テーブルセルの値を設定するこれらの行が何百もあります。

         dailyResult("SELECT COUNT(*) FROM fault WHERE Type = 'E-MAIL FAULT' AND No_Fault_Number <> 'No Fault Number' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 77, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE Type = 'E-MAIL FAULT' AND No_Fault_Number = 'No Fault Number' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 78, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE CMTS = 'SJ1' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 80, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE CMTS = 'SJ2' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 81, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE CMTS = 'SJ3' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 82, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE CMTS = 'ALA1' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 83, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE CMTS = 'ALA2' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 84, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE CMTS = 'FVW' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 85, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE CMTS = 'MND1' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 86, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE Call_Concern = 'Slow Connection' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 88, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE Call_Concern = 'No Connection' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 89, 1); 
         dailyResult("SELECT COUNT(*) FROM fault WHERE Call_Concern = 'Intermittent Connection' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 90, 1); 

見ているだけで気分が悪くなります。これを単純化するためのループがあるかどうかを調べる必要がありますか? どんな種類の助けも素晴らしいでしょう。

これがメソッドコードです。

  public void dailyResult(String q, int x, int y){

    try{
        Statement stmtDr = (Statement)daily.createStatement();
        ResultSet rs = stmtDr.executeQuery(q);
    if(rs.next()){
        reportTable1.setValueAt(rs.getInt(1), x, y);
    }
    }catch(Exception e){
                   JOptionPane.showMessageDialog(rootPane, "Error 106\n\nAn error has occured with the resultset procedure method. Please try again later.", "Error!", JOptionPane.ERROR_MESSAGE);
4

2 に答える 2

1

クエリで group by を使用できます。これを置き換えます

dailyResult("SELECT COUNT(*) FROM fault WHERE CMTS = 'MND1' AND CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year , 86, 1); 

dailyResult("SELECT CMTS,COUNT(*) FROM fault WHERE CallTypeInt = 'TRI' AND DC_Month = " + month + " AND DC_Day = " + day + " AND DC_Year = " + year +" GROUP BY CMTS", 86, 1); 

その後、dailyResult で

ResultSet rs = stmtDr.executeQuery(q);
while(rs.next()){  // we are expecting multiple rows now
    String faultType = rs.getString(1);//what fault is this?
    reportTable1.setValueAt(rs.getInt(2), getXOffset(faultType), y);
}

注意すべきことは、障害が見つからない場合は行が返されないことですが、それは現在と同じ動作であるため、それに対応していると思います。

于 2013-05-06T03:24:57.513 に答える