2013-08-17 23 views
0

我在試圖遍歷結果集並能夠將我檢索到的記錄存儲到我的類Threat.java中的對象的ArrayList中掙扎。我是一個相當初學的程序員,他被拋入一個大型的Java項目,所以很不幸,我沒有一個一致的學習經歷,所以我對如何使這個過程工作的理解是缺乏的。 Database.java處理所有數據庫過程(連接,獲取結果集,分配字段),而MainDisplay.java是我想要完成大部分工作的地方,至少現在是這樣。 Threat.java有多個變量,但我只關心能否成功打印server_id。將數據存儲到交叉類的對象的數組列表中

我得到的錯誤是在那裏我有我的add()在MainDisplay它讀取線法:「Add方法(威脅)在ArrayList類型是不適用的參數(無效)」

任何人都可以幫我解釋一下我的情況嗎?我認爲我的組織已經混亂起來,努力去理解如何通過方法而不是通過參數來添加字段。

更新:我更改了公共字符串setServer_Id(字符串服務器),但仍然有同樣的錯誤

Database.java

public class Database { 

String details = null; 
ResultSet rslt = null; 
private int threat_level; 
private String target; 
private String server_id; 
private int client_id; 
private String attacker; 
private String num_this_attack; 

Connection con; 
public void createConnection() { 

    //sensitive info 

} 

public ResultSet getData() { 

    String query = "SELECT target_stats.server_id, target_stats.target, target_stats.threat_level, target_stats.client_id, attack_stats.attacker, attack_stats.num_this_attack " + 
      "  FROM target_stats " + 
      "  LEFT OUTER JOIN attack_stats " + 
      "  ON target_stats.target = attack_stats.target " + 
      "  WHERE target_stats.num_attacks > '0' " + 
      "  AND target_stats.interval_id>'2'"; 
    Statement stmt = null; 
    try { 
     stmt = con.createStatement(); 
    } catch (SQLException e) { 

     e.printStackTrace(); 
    } 

    try { 
     rslt = stmt.executeQuery(query); 
    } catch (SQLException e) { 

     e.printStackTrace(); 
    } 

    return rslt;  

} 

public void process() { 

    try { 


     server_id = rslt.getString("server_id"); 
     target = rslt.getString("target"); 
     threat_level = rslt.getInt("threat_level"); 
     client_id = rslt.getInt("client_id"); 
     attacker = rslt.getString("attacker"); 
     num_this_attack = rslt.getString("num_this_attack"); 
     //details = "Target IP: " + target + " Server ID: " + server_id + " Client ID: " + client_id + " Threat Level: " + threat_level + " Attacker IP: " + attacker + " Number of attacks: " + num_this_attack; 
     //System.out.println(details); 


    } catch (SQLException e) { 

     e.printStackTrace(); 
    } 

public String getServer_id(){ 
    return server_id; 
} 

Threat.java

public class Threat { 
private String server_id; 
private String target; 
private int threat_level; 
private String client_id; 
//ArrayList<ArrayList<String>> attackerXnumberY = new ArrayList<ArrayList<String>>(); 

public Threat(){ 
    server_id = null; 
} 

public String setServer_Id(String server){ 
    server_id = server; 
      return server_id; 
} 

public String getServer_Id(){ 
    return server_id; 
} 


} 

MainDisplay.java

public class MainDisplay { 

private static String serverHolder; 

public static void main(String[] args) { 
    Database Data = new Database(); 
    //Threat threat = new Threat(); 
    ArrayList<Threat> StatusInfo = new ArrayList<Threat>(); 

    Data.createConnection(); //Create connection to database 
    Data.getData(); //Runs query and returns result set 

    try { 
     while(Data.rslt.next()){ 
      Data.process(); 
      serverHolder = Data.getServer_id(); 
      //StatusInfo.add(threat.setServer_Id(serverHolder)); 
      Threat threat = new Threat(); 
      StatusInfo.add(threat.setServer_Id(serverHolder)); 
      System.out.print(StatusInfo); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

} 

} 

回答

0

這種方法:

threat.setServer_Id(serverHolder) 

返回void,什麼都沒有。因此,在ArrayList中添加一個「void」是沒有意義的。您需要仔細考慮您想要添加到列表中的內容,然後相應地更改您的代碼。

你需要給你的威脅類像樣的構造,並利用這些信息從數據庫中創建一個新威脅對象,並添加到ArrayList。

+0

返回無效,我沒有之前的空隙,但是當它不是無效的時候,它給出了一個錯誤。 Eclipse建議將其切換爲void或使其成爲構造函數。這對我來說真的沒有什麼意義,但是當我把它變成無效時,錯誤消失了。 –

+0

@solleks:您需要創建一個威脅對象(看起來),爲此,您應該創建一個構造函數。儘管編譯器錯誤消息很有用,但您需要使用這些信息,但不要盲目跟隨它。使用void不會幫助你。 –

+0

@solleks:你的改變沒有意義。一個字符串會在這裏做什麼好? **再次**你需要給這個類一個構造函數**並使用它來創建一個* new * Threat對象。不知道如何更清楚。如果建議令人困惑,那麼請澄清,但請不要忽略它們。 –

0

這裏的問題是:

 StatusInfo.add(threat.setServer_Id(serverHolder)); 

您需要Threat對象添加到一個ArrayList,但上面的代碼行試圖添加從threat.setServer_Id(serverHolder)

相關問題