2013-08-17 9 views
0

Я изо всех сил пытаюсь выполнить итерацию по набору результатов и возможность хранения записей, которые я извлекаю в 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(); 
    } 

} 

} 

ответ

0

Этот метод:

threat.setServer_Id(serverHolder) 

возвращает пустоту, ничего. Поэтому нет смысла добавлять «пустоту» в ArrayList. Вам нужно продумать, что вы пытаетесь добавить в список, а затем изменить свой код соответственно.

Вы должны дать вашему классу угрозы приличный конструктора, и использовать информацию из базы данных, чтобы создать новый объект угрозы, а также добавить что к ArrayList.

+0

у меня не было его недействительным раньше, но когда это было не пусто, оно дало ошибку. Eclipse предложил переключить его на void или сделать его конструктором. мне и вправду не было смысла, но когда я сделал это бездействием, ошибка исчезла. –

+0

@solleks: вам нужно создать объект Threat (кажется), и для этого вы должны создать конструктор. Хотя сообщения об ошибках компилятора полезны, вам нужно использовать информацию, но не слепо следовать ей. Использование void не поможет вам здесь. –

+0

@solleks: ваши изменения не имеют смысла. Какая польза от String? ** Снова ** вам нужно дать классу ** конструктор ** и использовать его для создания * нового объекта Threat. Не знаете, как сделать это более ясным. Если рекомендации сбивают с толку, тогда просьба уточнить, но, пожалуйста, не просто игнорируйте их. –

0

Вот проблема:

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

Вы должны добавить Threat объекты к ArrayList, но выше строки кода пытается добавить пустоту, возвращенное из threat.setServer_Id(serverHolder)

Смежные вопросы