Programmation java Projet PPE BTS SIO

Fermé
Pinigseu Messages postés 5 Date d'inscription lundi 16 octobre 2017 Statut Membre Dernière intervention 25 avril 2019 - 25 avril 2019 à 07:29
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 25 avril 2019 à 14:38
Bonjour/Bonsoir à tous !
Alors voilà j'ai un gros problème et j'espère que vous pourrez m'aider.
Je dois préparer un client lourd en Java pour un projet PPE que je dois présenter à mon BTS et l'utilisation d'un client lourd est obligatoire pour le passer ( mon professeur m'a forcé la main pour créer le code moi même et j'ai fais l'erreur d'accepter... )
Je suis un gros débutant dans se langage et c'est pour ça que j'ai décidé de me mettre sur débutant même si le code que vous allez voir est plus poussé ! Mais je vais vous expliquer.
Si j'ai mal fais je m'en excuse d'avance.
En fait le projet que j'ai décidé de mener est un tableau de taxation qui va répertorier tous les appels d'un serveur téléphonique sous la forme d'un tableau Jtable en ce connectant à la base de donnée ( la dessus pas de problème, le client lourd ce connecte niquel) mais le problème c'est que mon tableau ne récupère que le premier champ de la base de donnée et n'affiche pas les autres !
Le problème c'est que mon professeur a décidé de m'aider et a fait énormément de trucs dessus avant de me dire qu'il a fait trop de tests et que je dois tout recommencer....
Il a fait pleins de trucs sur mon code sans le commenter et je n'ai aucunes idée de ce qu'il a fait parce que ce n'est pratiquement pas commenté et je comprend rien il m'a parlé de seter/geter et je ne sais même pas ce que c'est et j'ai franchement pas envie de recommencer et ça me fais pas mal stresser parce que je passe mon orale dans 1 mois...
Je sais que de me cracher le code sera inutile pour mon apprentissage mais si on pouvait m’aiguiller ce qui ne sert à rien et que je peux nettoyer dans mon code et m'expliquer où est-ce qu'il faut que je cherche serait vraiment un plus pour que je puisse trouver une solution et se serait vraiment sympas de votre part

Vous allez surement vous dire si tu ne comprend rien comment tu as fait pour faire une partie tout seul ? Ben c'est pas bien mais c'est surtout du copié/collé sur internet et quand ça marche tant mieux quoi .. mais je savais pas trop ce que je faisais..
Je sais que j'aurais dû m'y prendre plus tôt mais ça fait plus d'un an que je me concentre sur mon infrastructure que je l'ai un peu trop mis de côté...
Je vous met mon code ( ça va surement faire mal aux yeux mais bon j'ai plus rien à perdre xD )

Statistiques.java :

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
 
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
 
public class Statistiques extends JFrame {
 
 
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		//tableau conteant les objets CALL
		ArrayList<Call> calls=new ArrayList<Call>();
		System.out.println("-------- PostgreSQL "
				+ "JDBC Connection Testing ------------");
 
		try {
 
			Class.forName("org.postgresql.Driver");
 
		} catch (ClassNotFoundException e) {
 
			System.out.println("Where is your PostgreSQL JDBC Driver? "
					+ "Include in your library path!");
			e.printStackTrace();
			return;
 
		}
 
		System.out.println("PostgreSQL JDBC Driver Registered!");
 
		Connection connection = null;
		ArrayList<String> datatab= new ArrayList<String>();
		try {
 
			connection = DriverManager.getConnection(
					"jdbc:postgresql://192.168.1.48:5432/asterisk", "asterisk",
					"proformatique");
 
			ResultSet resultats = null;
			String requete = "SELECT * FROM call_log";
 
 
			try {
			Statement stmt = connection.createStatement();
			resultats = stmt.executeQuery(requete);
			Call acall=new Call();
			while(resultats.next()) {
 
				System.out.println(resultats.getString("id"));
				System.out.println(resultats.getString("date"));
				System.out.println(resultats.getString("duration"));
				datatab.add(resultats.getString("id"));
				acall.setID(resultats.getString("id"));
				datatab.add(resultats.getString("date"));
				acall.setDate(resultats.getString("date"));
				datatab.add(resultats.getString("duration"));
				acall.setDuration(resultats.getString("duration"));
				calls.add(acall);
			}
			for (Call asTring: calls) {
				System.out.println(asTring.toString());
			}
			} catch (SQLException e) {
			//traitement de l'exception
			}
 
 
		} catch (SQLException e) {
 
			System.out.println("Connection Failed! Check output console");
			e.printStackTrace();
 
			return;
 
		}
 
		if (connection != null) {
			System.out.println("You made it, take control your database now!");
		} else {
			System.out.println("Failed to make connection!");
		}
 
		 Statistiques fen = new Statistiques(datatab, calls);
 
		 fen.setVisible(true);
	}
 
	 public Statistiques(ArrayList<String> datatab, ArrayList<Call> calls){
 
		    this.setLocationRelativeTo(null);
		    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		    this.setTitle("JTable");
		    this.setSize(300, 120);
for (String string : datatab) {
 
	System.out.println("-------"+string);
}
String Stringtableau="{";
for (Call acall : calls) {
 
Stringtableau+= acall.toString()+ "\n" ;
 
}
//Stringtableau+="}";
System.out.println(Stringtableau);
 
 
		    //Les données du tableau
		    Object[][] data = {datatab.toArray()
		    		//{resultats.getString("id"), resultats.getString("date"), resultats.getString("duration")}
		    };
 
 
		    //Les titres des colonnes
		    String  title[] = {"ID", "Date", "Durée"};
		    JTable tableau = new JTable(data, title);
		   // ArrayList tableauDynamique = new ArrayList(Arrays.asList(tableauSimple));
		    //Nous ajoutons notre tableau à notre contentPane dans un scroll
		    //Sinon les titres des colonnes ne s'afficheront pas !
		    this.getContentPane().add(new JScrollPane(tableau));
 
 
	 }
 
}


Call.java :


 
public class Call {
 
	String ID; 
	String Date; 
	String Duration;
 
	public Call() {}
 
	public Call(String _ID,String _Date,String _Duration) {
	ID=_ID;
	Date=_Date;
	Duration=_Duration;
	}
 
	public String getID() {
		return ID;
	}
	public void setID(String iD) {
		ID = iD;
	}
	public String getDate() {
		return Date;
	}
	public void setDate(String date) {
		Date = date;
	}
	public String getDuration() {
		return Duration;
	}
	public void setDuration(String duration) {
		Duration = duration;
	}
 
	public String toString() {return "{"+ID+","+Date+","+Duration+"}";}
 
 
}


Merci d'avance pour votre aide !
A voir également:

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
25 avril 2019 à 08:12
Bonjour,

"le problème c'est que mon tableau ne récupère que le premier champ de la base de donnée et n'affiche pas les autres"
Le problème vient de ta boucle
while (resultats.next())
où tu ajoutes tous les String dans datatab et de ton tableau
Object[][] data = { datatab.toArray() };
dans le constructeur.
Ici data.length == 1, il y a donc une seule ligne dans le tableau, c'est "normal".

Je pense que tu peux supprimer la liste datatab du constructeur, pour ne garder que la liste calls, il faudra toutefois un petit traitement pour ton Object[][] data soit un tableau à 2 dimensions, avec autant de lignes que d'objets dans la liste. Objectif : data.length == calls.size()

Remarque : à lire ton code on dirait que tu fais du Java 6... tu pourrais peut-être te mettre à jour ?
0
Pinigseu Messages postés 5 Date d'inscription lundi 16 octobre 2017 Statut Membre Dernière intervention 25 avril 2019
25 avril 2019 à 10:20
Bonjour et mille mercis pour ton aide !
En effet mon
data.length
est effectivement ==1 mais je ne maîtrise pas trop comment puis-je faire pour changer sa valeur ?
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018 > Pinigseu Messages postés 5 Date d'inscription lundi 16 octobre 2017 Statut Membre Dernière intervention 25 avril 2019
25 avril 2019 à 14:38
Si tu affiches data tu dois avoir quelque chose comme ceci :
{
    {"id1","date1","duration1","id2","date2","duration2","id3","date3","duration3"}
}
Alors que tu devrais plutôt avoir quelque chose comme ceci :
{
    {"id1","date1","duration1"},
    {"id2","date2","duration2"},
    {"id3","date3","duration3"}
}
Il faut que tu construise un tableau à deux dimensions avec tes données.

Remarque : il faut inverser ses deux lignes dans ton code :
Call acall=new Call();
while(resultats.next()) {

Tu dois avoir autant d'objet acall que de lignes dans ton tableau :
while(resultats.next()) {
    Call acall=new Call();
0