JTree aus Datenbank erstellen

beribrauchthilfe

Grünschnabel
Hallo allerseits!

Ich habe folgende Aufgabe zu lösen!
Und zwar soll ich einen JTree aus einer Datenbank erstellen.
Und zwar soll ich aus der DB die Daten Kunde und Produkt anzeigen.
Also zu jedem Kunden die Produkte die er besitzt.
Leider fehlt mir total der Plan wie ich so etwas angehen soll!
Vielleicht kann mir da jemand helfen!
Danke schon im voraus.
 
Hallo,

am besten machst du erstmal einen Connect über den DriverManager von Java auf die Datenbank.
Danach kannst du mittels Select Befehlen die Daten auslesen lassen.
Diese bereitest du auf und erzeugst damit einen JTree.
Zu welchem Datenbanktyp willst du dich verbinden?

Mfg
Matthias
 
Hi,

wenn JDBC nicht unbedingt das Problem ist(?), hier ein Ansatz, wie man den Tree mit Kundenknoten auf der 1.Ebene und den kundenspezifischen Produkten auf der 2.Ebene
kreieren könnte (ACHTUNG: nicht getesteter Schnellschuss ohne Gewähr, aber Du darfst mich "flamen", wenn Bugs drin sind usw.):

Code:
      import javax.swing.*;
      import javax.swing.tree.DefaultMutableTreeNode;
      import javax.swing.tree.DefaultTreeModel;
      import java.sql.Connection;
      import java.sql.SQLException;
      import java.sql.Statement;
      import java.sql.ResultSet;
      
  // Knotenklasse zum Speichern für Kundenname & KundenID
      class CTreeNode extends DefaultMutableTreeNode{
      	int id;
      	// 1.Konstruktor
      	CTreeNode(Object title){
      	  super(title);
      	}
      	// 2.Konstruktor
      	CTreeNode(int id, Object title){
      	  super(title);
      	  this.id = id;
      	}
      
      	public void setID(int id){this.id = id;}
      	public int  getID(){return this.id;}
        }
      
      // DefaultTreeModel zum erstellen von Kunden & Produkten
        class CTreeModel extends DefaultTreeModel{
      
      	private Connection con;
      
      // Konstruktor:
      	CTreeModel(CTreeNode root, Connection con){
      	  super(root);
      	  this.con = con;
      	}
      
      // Methode, um Baumelemente einzufügen:
      	private void insertNode(CTreeNode newNode, CTreeNode parent){
      	  int i = getChildCount(parent);
      	  insertNodeInto(newNode, parent, i);
      	}
      
      //Methode, mit der Du die Kunden an die Wurzel hängst
      
      	public void createCustomers() throws SQLException{
      		if (con == null)return;
      		Statement stmt = con.createStatement();
 		ResultSet rs = stmt.executeQuery("Select KundenID, Kundenname from Kunde");
      
      		while (rs != null && rs.next()) {
 		 insertNode(new CTreeNode(rs.getInt(1), rs.getString(2)), (CTreeNode)this.getRoot());
      		}
      	}
      
      // dann: Methode, um die Produkte an die Kunden zu hängen
      // (man könnte Kunden & Produkte natürlich auch zusammen in 1 Methode
      // einlesen)
      
      	public void createProducts() throws SQLException {
      	  if (con == null)return;
      	  Statement stmt = con.createStatement();
      
      // Kundenknoten durchlaufen und deren KundenID holen
      // -> sollte hier mit Produkt-Tabelle verknüpft sein
      
      	  for (int c = 0; c <((CTreeNode)this.getRoot()).getChildCount(); c++){
      		CTreeNode customer  = (CTreeNode)((CTreeNode)this.getRoot()).getChildAt(c);
 		ResultSet rs = stmt.executeQuery("Select ProduktID, Produktname from Produkte p " +
 										 "where p.KundenID = " + customer.getID());
      
      		while (rs != null && rs.next()) {
      		  CTreeNode product =  new CTreeNode(rs.getInt(1), rs.getString(2));
      		  insertNode(product, customer);
      
      		}
      	  }
      	}
        }


// Anwendung ungefähr so:

CTreeNode root = new CTreeNode("Kunden & Produkte");

// hier JDBC-Krams, Du brauchst java.sql.Connection-Objekt auf die DB
try{
Class.forName(conDriverName).newInstance();
con = DriverManager.getConnection(conURL, conUserName, conPasswd);

CTreeModel model = new CTreeModel(root, con);
model.createCustomers();
model.createProducts();

JTree tree = new JTree(model);

}
catch(SQLException s){}



Wie gesagt, ohne gewähr, sollte eine Anregung sein.


Cheers,

Snake
 
Zuletzt bearbeitet:
Zurück