1
votes

Obtenir des valeurs de 3 à 5 variables entières à partir d'une classe différente dans JAVA

Je suis actuellement en train de faire un mini système de stationnement pour notre bootcamp JAVA.

J'essaye d'obtenir la valeur des variables entières dans une classe différente. Ces variables sont les résultats des décomptes sql du total garé ( countCar , countMotor et countVan).

Ceci est ce que j'ai fait:

Je les ai stockés dans une classe appelée SQLCountResult:

public class Park {

    public Connection con = null;

    public void parkMethod() {
        SQLConnections sqlConnections = new SQLConnections();
        sqlConnections.parkInSQL();
    }

}

Maintenant, je veux appeler countCar , countMotor et countVan à une autre classe appelée Park. Mon code pour la classe Park est ci-dessous:

public class SQLConnections {
    public Connection con = null;

    public void parkInSQL() {
        con = dbConnect.con();

        int countCar;
        int countMotor;
        int countVan;

        int parkCar;
        int parkMotor;
        int parkVan;

        int[] vehicleTotal = new int[3];

        String qCar = "SELECT COUNT(*) FROM `vehicle` WHERE `vType` = 1 AND `parkout` IS NULL";
        String qMotor = "SELECT COUNT(*) FROM `vehicle` WHERE `vType` = 2 AND `parkout` IS NULL";
        String qVan = "SELECT COUNT(*) FROM `vehicle` WHERE `vType` = 3 AND `parkout` IS NULL";

        try {
            Statement stmtCar = con.createStatement();
            Statement stmtMotor = con.createStatement();
            Statement stmtVan = con.createStatement();

            ResultSet rsCar = stmtCar.executeQuery(qCar);
            ResultSet rsMotor = stmtMotor.executeQuery(qMotor);
            ResultSet rsVan = stmtVan.executeQuery(qVan);

            rsCar.next();
            rsMotor.next();
            rsVan.next();

            countCar = rsCar.getInt(1);
            countMotor = rsMotor.getInt(1);
            countVan = rsVan.getInt(1);

        } catch(SQLException e) {
            e.printStackTrace();
        }
    }
}

J'ai aussi essayé d'utiliser extend mais cela n'a pas fonctionné non plus. Comment puis-je appeler ces variables dans la classe Park?


0 commentaires

4 Réponses :


2
votes

Je vous suggère de commencer par faire quelques lectures supplémentaires sur membres de la classe a> et à l'aide d'objets . Si vous n'êtes pas familier avec les objets, lisez cet article complet intitulé Qu'est-ce qu'un Objet? . Je ne peux pas souligner à quel point il est important de comprendre cela. Le concept même de «programmation orientée objet» est centré sur les objets. Une fois que vous vous êtes familiarisé avec cela, continuez et lisez le reste de ma réponse.


Maintenant que vous connaissez les articles que j'ai cités ci-dessus, je vais commencer par configurer quelques champs strong>, qui sont expliqués dans l'article «Déclaration des variables membres». Nous devons d'abord nous demander: "Quelles variables essayons-nous de récupérer dans notre classe Park ?" Comme vous l'avez mentionné dans votre question, les variables concernées sont countCar , countMotor et countVan .

Nous avons identifié les variables que nous recherchons. Maintenant quoi? L'étape suivante consiste à changer ces variables en champs afin qu'elles ne soient pas englouties par le garbage collector lorsque votre méthode parkInSQL revient. C'est une tâche simple. Commençons par supprimer les variables de votre méthode parkInSQL :

public class Park {

    public Connection con = null;

    public void parkMethod() {
        SQLConnections sqlConnections = new SQLConnections();
        sqlConnections.parkInSQL();

        int countCar = sqlConnections.countCar;
        int countMotor = sqlConnections.countMotor;
        int countVan = sqlConnections.countVan;
    }

}

Ensuite, nous devons déclarer ces variables en tant que champs. Pour ce faire, placez simplement les déclarations de variables en haut de votre classe, comme vous l'avez fait avec votre variable Connection :

SQLConnections sqlConnections = new SQLConnections();

Notez que je utilisé le public modificateur d'accès . Ceci afin de nous assurer que ces champs seront visibles pour notre classe Park (nous pourrions les rendre privés, mais cela nous amènerait à getters et setters , ce qui est une leçon pour une autre fois).

Une fois nos variables déclarées en tant que champs, nous devrions tous être définis avec la classe SQLConnections . Le reste est simple comme bonjour.

Vous avez déjà fait la moitié du travail. Si vous regardez votre parkMethod , vous verrez que vous avez construit un objet SQLConnections:

public class SQLConnections {
    public Connection con = null;
    public int countCar;
    public int countMotor;
    public int countVan;

    //...
}

Il ne nous reste plus qu'à référencer le nouveau les champs créés, ce qui est expliqué dans l'article "Utilisation d'objets" que j'ai cité ci-dessus. Après avoir appelé sqlConnections.parkInSQL () , vous pouvez référencer les champs avec sqlConnections.countCar , sqlConnections.countMotor et sqlConnections. countVan :

public void parkInSQL() {
        con = dbConnect.con();

        ̶ ̶i̶n̶t̶ ̶c̶o̶u̶n̶t̶C̶a̶r̶;̶
        ̶ ̶i̶n̶t̶ ̶c̶o̶u̶n̶t̶M̶o̶t̶o̶r̶;̶
        ̶ ̶i̶n̶t̶ ̶c̶o̶u̶n̶t̶V̶a̶n̶;̶

        //...
}

Vous pouvez maintenant opérer sur ces valeurs en conséquence.


0 commentaires

1
votes

Vous pouvez changer la portée des variables.

Déplacez ceci:

public class Park {

    public Connection con = null;

    public void parkMethod() {
        SQLConnections sqlConnections = new SQLConnections();
        int iAmUsingCountCar = sqlConnections.countCar;
    }

}

en dehors de la méthode parkInSQL , et ajoutez l'accès modificateur, public:

    public int countCar;
    public int countMotor;
    public int countVan;

Ensuite, vous pouvez y accéder depuis la classe Park comme ceci:

    int countCar;
    int countMotor;
    int countVan;


0 commentaires

0
votes

Les variables définies dans une méthode sont locales à cette méthode.
Si vous souhaitez partager des variables entre classe / méthodes, vous devrez les spécifier en tant que variables membres de la classe. Vous devez l'initialiser en dehors des méthodes.

public class SQLConnections { 

    public int countCar;
    public int countMotor;
    public int countVan;

    //...
}


0 commentaires

0
votes
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class VehicalesDAOImpl {
  private Connection connection;

  public VehicalesDAOImpl(Connection connection) {
    this.connection = connection;
  }

  public VehicleStatistics getVehicleStatistics() {
    String qCar = "SELECT COUNT(*) FROM `vehicle` WHERE `vType` = 1 AND `parkout` IS NULL";
    String qMotor = "SELECT COUNT(*) FROM `vehicle` WHERE `vType` = 2 AND `parkout` IS NULL";
    String qVan = "SELECT COUNT(*) FROM `vehicle` WHERE `vType` = 3 AND `parkout` IS NULL";
    VehicleStatistics result = null;
    try {
      Statement stmtCar = connection.createStatement();
      Statement stmtMotor = connection.createStatement();
      Statement stmtVan = connection.createStatement();

      ResultSet rsCar = stmtCar.executeQuery(qCar);
      ResultSet rsMotor = stmtMotor.executeQuery(qMotor);
      ResultSet rsVan = stmtVan.executeQuery(qVan);

      rsCar.next();
      rsMotor.next();
      rsVan.next();

      int countCar =rsCar.getInt(1);
      int countMotor =rsMotor.getInt(1);
      int countVan =rsVan.getInt(1);
      result = new VehicleStatistics(countCar, countMotor, countVan);
    } catch(SQLException e) {
      //log error
    } finally {
      //close connections etc...
    }
    return result;
  }
}

0 commentaires