Przesyłanie zmiennych do innej klasy

0

Witam mam problem związany z przesyłaniem zmiennych z 1 klasy do 2.

Dokładniej chodzi mi o 3 zmienne które są skomentowane w kodzie

1 klasa z której chce pobrać zmienne

public class BazaDanych
{
   
  public int dzien1;
  public int miesiac1;  // deklaracja 3 publicznych zmiennych które są użyte w tej klasie                     
  public int rok1;

public Vector zawtabeli(java.util.Date A_date)
   {
      String sql;
      Statement stm;
      ResultSet rset;
      Vector vec;

      GregorianCalendar calendar = new GregorianCalendar();
      calendar.setTime(A_date);
      int month = calendar.get(Calendar.MONTH)+1;
      int day = calendar.get(Calendar.DAY_OF_MONTH);
      int year = calendar.get(Calendar.YEAR);

      sql = "SELECT MIASTA.ID, MIASTA.Nazwa, TEMPERATURA.Temp FROM TEMPERATURA,MIASTA WHERE MIASTA.ID=TEMPERATURA.ID" +
         " AND month(TEMPERATURA.Data)="+month+" AND day(TEMPERATURA.Data)="+day+" AND year(TEMPERATURA.Data)="+year+" ORDER BY MIASTA.Nazwa";
 
        dzien1=day;
	miesiac1=month;    //Chodzi aby te 3 zmienne zostaly wyslane do klasy Wyrkes i tam wykorzystane
	rok1=year;


      vec = new Vector();

      try
      {
         stm = laczenie.createStatement();
         rset = stm.executeQuery(sql);
         while(rset.next())
         {
            vec.addElement(new Wiersze(rset.getString(1), rset.getString(2),
                  rset.getDouble(3), Wiersze.Bez_Zmiany));
         }
         rset.close();
         stm.close();
      }
      catch(SQLException e)
      {
         System.out.println( e.getMessage() );
         return null;
      }

      return vec;

   }
}

2 klasa aby zmienne zostały przyjęte

public class Wykres  {

int dzien = 17;
int miesiac = 11;       //jezeli wpisze na sztywno to wyświetla mi się dobrze wykres, lecz gdy użyje zmiennej                  
int rok = 2011;     //np. int dzien = dzien1; to wyświetla mi się błąd ze nie mam zadeklarowanej zmiennej dzien1


public Wykres() throws ClassNotFoundException, SQLException{


    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection conn = DriverManager.getConnection("jdbc:odbc:Pogoda","","");

   JDBCCategoryDataset pieDataset = new JDBCCategoryDataset(
   	conn, "SELECT DISTINCT Nazwa, Temp FROM TEMPERATURA,MIASTA WHERE MIASTA.ID=TEMPERATURA.ID AND month(TEMPERATURA.Data)="+miesiac+" AND day(TEMPERATURA.Data)="+dzien+"AND year(TEMPERATURA.Data)="+rok+"");

      JFreeChart chart = ChartFactory.createLineChart("Wykres temperatur dla Polski", "MIASTA", "TEMPERATURA",
                                pieDataset, PlotOrientation.VERTICAL, true, true, false);

		ChartFrame chartFrame = new ChartFrame("Wykres Temperatur", chart);
        chartFrame.pack();
        chartFrame.setVisible(true);
        chartFrame.setBounds(new Rectangle(1024,400));
        chart.setBackgroundPaint(Color.gray);
        chart.getTitle().setPaint(Color.WHITE);
        CategoryPlot p = chart.getCategoryPlot();
		p.setBackgroundPaint(Color.black);
		p.setRangeGridlinePaint(Color.red);

    }

   }

Czy to nie jest tak ze jezeli w 1 klasie uzylem publicznej zmiennej to ona powinna byc także dostępna w innych klasach ?
Prosił bym o jakas podpowiedz jak wysłać te zmienne

0

Można przesłać zmienne do konstruktora np:

int day, month, year;
public Wykres(int day, int month, int year) {
     this.day = day; // i tak każdą zmienną przypisać
     //reszta kodu....
}
0

Ja bym wysłał raczej referencję do klasy wysyłającej (u Ciebie, to chyba BazaDanych). Mniej pisania, a więcej możliwości. Możesz korzystać ze wszystkiego co jest w klasie wysyłającej.

0

Jak można w ogóle próbować napisać coś co łaczy sie z bazą danych nie mając pojęcia o programowaniu? o_O
Lekcje na dziś:

  1. Argumenty funkcji/metod - tak, można do metody przekazać jakieś wartości i tego właśnie potrzebujesz
  2. Enkapsulacja - czyli czemu pola powinny jednak być prywatne...
  3. SQL Injection czyli czemu nie należy budować zapytań sql tak jak to zrobiłeś

Przy okazji: to że pole jest publiczne oznacza tylko że można odczytać jego wartość mając dostęp do OBIEKTU danej klasy. Twoje rozumowanie jest bez sensu, bo co by się stało gdybyś miał 2 obiekty klasy BazaDanych? Które wartości pól miałyby być dostępne wg ciebie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1