Я изо всех сил пытаюсь выполнить итерацию по набору результатов и возможность хранения записей, которые я извлекаю в ArrayList объектов из моего класса Threat.java. Я довольно начинающий программист, который, к сожалению, был сорван в большой проект java, у меня не было последовательного опыта обучения, поэтому мое понимание того, как сделать этот процесс, отсутствует. Database.java обрабатывает все процедуры базы данных (соединение, получение набора результатов, назначение полей) и MainDisplay.java, где я хочу выполнять большую часть своей работы, по крайней мере, на данный момент. У Threat.java есть несколько переменных, но меня беспокоит возможность успешно распечатать server_id.хранение данных в arraylist объектов перекрестных классов
Ошибки я получаю на линии, где у меня есть моя надстройка() метод в MainDisplay, который гласит: «Метод добавление (Threat) в типе 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: вам нужно создать объект Threat (кажется), и для этого вы должны создать конструктор. Хотя сообщения об ошибках компилятора полезны, вам нужно использовать информацию, но не слепо следовать ей. Использование void не поможет вам здесь. –
@solleks: ваши изменения не имеют смысла. Какая польза от String? ** Снова ** вам нужно дать классу ** конструктор ** и использовать его для создания * нового объекта Threat. Не знаете, как сделать это более ясным. Если рекомендации сбивают с толку, тогда просьба уточнить, но, пожалуйста, не просто игнорируйте их. –