我在試圖遍歷結果集並能夠將我檢索到的記錄存儲到我的類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();
}
}
}
返回無效,我沒有之前的空隙,但是當它不是無效的時候,它給出了一個錯誤。 Eclipse建議將其切換爲void或使其成爲構造函數。這對我來說真的沒有什麼意義,但是當我把它變成無效時,錯誤消失了。 –
@solleks:您需要創建一個威脅對象(看起來),爲此,您應該創建一個構造函數。儘管編譯器錯誤消息很有用,但您需要使用這些信息,但不要盲目跟隨它。使用void不會幫助你。 –
@solleks:你的改變沒有意義。一個字符串會在這裏做什麼好? **再次**你需要給這個類一個構造函數**並使用它來創建一個* new * Threat對象。不知道如何更清楚。如果建議令人困惑,那麼請澄清,但請不要忽略它們。 –