2014-01-02 3 views
0

Я хотел бы попросить вас о помощи. На моих нынешних навыках программирования на Java, которые являются довольно основными, эта проблема для меня волшебна. Позволь мне объяснить первое, что было мое намерение: Я хотел, чтобы загрузить данные из базы данных на вкладку под названием airportList объекта, и это вкладка объектов аэропорта инициализируется здесь:Ячейка объекта самообновления

public void init() 
    { 
     System.out.println("Applet inicialization ..."); 
     mysqllink = new MySQLlink(); 

    try { 
     mysqllink.getConnection(); 
    } catch (SQLException e) { 
     System.out.println("Fuck you! Not connected!"); 
     e.printStackTrace(); 
    } 

    allAirportAmount = mysqllink.getNumerOfRows(tabela_lotnisk); 
    allAirlineAmount = mysqllink.getNumerOfRows(tabela_linii); 
    allAirplanesAmount = mysqllink.getNumerOfRows(tabela_samolotow); 
    allConnectionsAmount = mysqllink.getNumerOfRows(tabela_tras); 


    airportList = new Airport[allAirportAmount];  //Airport object tab 
    airportList2 = new String[allAirportAmount];  //as a test i put only Airport name from database over here to String tab 

    airlineList = new String[allAirlineAmount]; 
    airplaneList = new String[allAirplanesAmount]; 



    FlightConnectionFrame frame = new FlightConnectionFrame(); 
    //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(frameWidth,frameHeight); 
    frame.setVisible(true); 
    add(frame); 



} 

public static MySQLlink mysqllink = new MySQLlink(); 
public static int allAirportAmount; 
public static int allAirlineAmount; 
public static int allAirplanesAmount; 
public static int allConnectionsAmount; 
public static Airport airportList[]; // declaration over here 
public static String airportList2[]; // and here as a test 
public static String airlineList[]; 
public static String airplaneList[]; 

Ok, и как вы можете видеть, у меня есть 2 раза таблицы, список аэропортов объектов аэропорта и airportList2 строкового типа. В следующем фрагменте кода я загружать данные из базы данных в этих двух вкладках одновременно:

public void viewAirportList() 
{  
    String query = "select id_lotniska, nazwa, lokalizacja, oplaty_lotniskowe from " + databaseName + "." + tabela_lotnisk; 
    Statement stmt = null; 
    try { 
     stmt = databaseConnection.createStatement(); 
     ResultSet rs = stmt.executeQuery(query); 

     int j = 0; 
     while (rs.next()) {     
       int id_l = rs.getInt("id_lotniska");  
       String name = rs.getString("nazwa");   
       String loc = rs.getString("lokalizacja"); 
       double tax = rs.getDouble("oplaty_lotniskowe"); 

       flight_connections.FCApletCore.airportList[j] = new Airport(id_l, name, loc, tax);  // this is where the Airport object is created and put into the AirportList tab 
       flight_connections.FCApletCore.airportList2[j] = name;         // here, as a test - i put only String value of name to AirportList2 tab 

       j++; 
      }   
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } finally { 
     if (stmt != null) { try { 
     stmt.close(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
     } 
    } 


} 

Это как класс Аэропорт выглядит следующим образом:

public class Airport { 
public Airport(int i, String n, String l, double o) 
{ 
    airport_id = i; 
    airport_name = n; 
    airport_localization = l; 
    airport_tax = o;   
    System.out.println(" > new object created:" + airport_name);  
} 

public int getAirportId(){return airport_id;} 
public String getAirportName(){return airport_name;}  
public String getAirportLocalization(){return airport_localization;}  
public double getAirportTax(){return airport_tax;} 


public static int airport_id; 
public static String airport_name; 
public static String airport_localization; 
public static double airport_tax; 

}

И используя 2x дЛЯ чтобы получить то, что внутри обеих вкладок в консоли:

System.out.println("*** Airport objects tab: airportList ***"); 
    for (int i=0; i<flight_connections.FCApletCore.allAirportAmount; i++) 
    { 
     System.out.println("airportList[" + i + "]: " + flight_connections.FCApletCore.airportList[i].getAirportName()); 
    } 

    System.out.println("*** String values tab: airportList2 ***"); 
    for (int i=0; i<flight_connections.FCApletCore.allAirportAmount; i++) 
    { 
     System.out.println("airportList2[" + i + "]: " + flight_connections.FCApletCore.airportList2[i]); 
    } 

результат является:

Applet inicialization ... 
Connecting database... 
Database connected! 
loading number of records from database table: lotniska ... 
loading number of records from database table: linie ... 
loading number of records from database table: samoloty ... 
loading number of records from database table: trasy ... 
> new object created:Port Lotniczy Balice 
> new object created:Port lotniczy Paryż Charles de Gaulle 
> new object created:Port Lotniczy Heathrow 
> new object created:Port Lotniczy O'Hare 
> new object created:Port Lotniczy Dubaj 
> new object created:Port lotniczy Berlin-Brandenburg 
> new object created:Port lotniczy San Francisco 
> new object created:Port lotniczy Tokio-Haneda 
*** Airport objects tab: airportList *** 
airportList[0]: Port lotniczy Tokio-Haneda 
airportList[1]: Port lotniczy Tokio-Haneda 
airportList[2]: Port lotniczy Tokio-Haneda 
airportList[3]: Port lotniczy Tokio-Haneda 
airportList[4]: Port lotniczy Tokio-Haneda 
airportList[5]: Port lotniczy Tokio-Haneda 
airportList[6]: Port lotniczy Tokio-Haneda 
airportList[7]: Port lotniczy Tokio-Haneda 
*** String values tab: airportList2 *** 
airportList2[0]: Port Lotniczy Balice 
airportList2[1]: Port lotniczy Paryż Charles de Gaulle 
airportList2[2]: Port Lotniczy Heathrow 
airportList2[3]: Port Lotniczy O'Hare 
airportList2[4]: Port Lotniczy Dubaj 
airportList2[5]: Port lotniczy Berlin-Brandenburg 
airportList2[6]: Port lotniczy San Francisco 
airportList2[7]: Port lotniczy Tokio-Haneda 

И если вы посмотрите на это, вкладка Строка в порядке, а на вкладке Аэропорт не так как он загружен только один - последний из записей из базы данных и как вкладки загружаются в две строки кода рядом друг с другом, у меня нет кода, который может каким-то образом изменить значения первой вкладки. Чтобы проверить, правильно ли созданы объекты аэропорта, я добавил System.out.println с именем созданного объекта и что вы можете видеть в результатах как правильные значения. Я добавлю, что я запускаю это как апплет, что может предложить init().

Я немного изменил код на английские имена, но значения базы данных и имена таблиц по-польски, например, в консоли вы видите «Port lotniczy», что означает «Аэропорт».

+0

* «Я хотел бы попросить у вас о помощи». * 1) Пожалуйста, используйте правильное написание слов типа «ты», «твой» и «пожалуйста». Это облегчает людям понимание и помощь. 2) Пожалуйста, добавьте письмо в верхнем регистре в начале предложений. Также используйте капитал для слова I, аббревиатуры и аббревиатуры, такие как JEE или WAR. Это облегчает людям понимание и помощь. –

+0

1) Чтобы получить более эффективную помощь, опубликуйте [SSCCE] (http://sscce.org/). 2) Пожалуйста, не забудьте добавить '?' на вопросы! Некоторые люди выполняют поиск на странице «?» и если ни один из них не существует в «вопросе», переходите непосредственно к следующему (фактическому) вопросу в очереди. –

+0

JB Nizet идеально подходит. На данный момент atlist вы можете сделать статические переменные экземпляра класса AirPort для Non Static. Это поможет вам понять вашу проблему. – Ketan

ответ

2

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

Использование публичных полей также не рекомендуется. Использование массивов вместо коллекций - тоже плохая идея. Вы должны узнать больше о static fields, collections и инкапсуляции перед использованием Swing и JDBC.

+0

О, спасибо, очень. Теперь я просто видел, что ставил статические поля в классе Airport, и, фактически, должно быть нестатическое поле, действительно ... Публичные поля есть только потому, что это бета-версия, после создания рабочей версии я буду думать об инкапсуляции. Но спасибо за совет. И конечно, я должен читать и узнавать больше обо всем, так как я совершенно новичок в объективном программировании ... Еще раз спасибо, ПРОБЛЕМА РЕШАЛА !!! – user3153182

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