# MySql Tabellenübersicht auswerten



## ElBobby (18. Nov 2009)

Hallo,

es ist für mein Programm notwendig, dass ich alle Tabellen aus meiner Datenbank auslese.
Das Statement wäre "SHOW TABLES;". Leider kann ich dies nicht auswerten, bzw bekomme eine Exception.

Wie kann ich es bewerkstelligen, dass ich die Tabellennamen alle aus dem Statement auslese?

Gruß, Bob


----------



## madboy (18. Nov 2009)

Was wäre das für eine Exception?


----------



## ElBobby (18. Nov 2009)

```
public String[] getMonate()
	{
		String[] monate = null;
		ResultSet rs = null;
		ResultSetMetaData rsmd = null;
		try
		{
			// Satement erstellen
			Statement st = conn.createStatement();
			// Befehl absetzen
			rs = st.executeQuery("SHOW TABLES;");
			// Metadaten abfragen
			rsmd = rs.getMetaData();
			// String Array erstellen
			monate = new String[rsmd.getColumnCount()];
			// Array befüllen
			while (rs.next())
			{
				for (int i = 1; i < rsmd.getColumnCount(); i++)
				{
					monate[i] = rs.getString(i);
					System.out.println(rs.getString(i));
				}
			}
		} catch (SQLException e)
		{
			e.printStackTrace();
		}

		return monate;
	}
```

Ok, eine Exception bekomme ich nicht, dafür aber ein leeres Array. Wenn ich den Inhalt einer Tabelle abfrage bekomme ich alle nötigen Daten.


----------



## madboy (18. Nov 2009)

Auf der Konsole wird auch nichts ausgegeben? 
Versuche mal, das Semikolon hinter SHOW TABLES weg zu lassen.


----------



## ElBobby (18. Nov 2009)

Also auf der Konsole wird nichts ausgegeben. Der Debugger sagt auch das es ein leeres Array ist, ebenso wie das ResultSet.


----------



## Spin (18. Nov 2009)

Ich hatte dass mal für ein Projekt programmiert:

Das speichern und laden ist implementiert für ein Objekt.
Das kann bei dir ja anders heißen, gruß

PS: Natürlich kommentiert ^^


```
/**
 * Klasse Datenbank zum Managen aller Datenbankereignisse.
 * Datenbank ansprechen, laden und ändern.
 * Alle Error-Ereignisse werden mit try/catch abgefangen
 */
import java.sql.*;
public class Datenbank {

    /*Instanzvariablen - Datenbank*/
    /* Pfad zu Datenbank*/
    private String url;
    /* Benutzername*/
    private String benutzer;
    /* Benutzerpasswort*/
    private String passwort;
    /* Objekt - Datenbankverbindung*/
    Connection verbinde;
    /* Objekt - Statement für DBAusgabe und DBSpeichern*/
    Statement stmt;

    Produkt p;
    
     public Datenbank(){
         this.url = "jdbc:mysql://localhost/kuehlschranksystem";
         this.benutzer = "root";
         this.passwort = "";
     }


     public void Datenbank_speichern(Produkt p){
        /* try öffnen*/
        try {
            /* Statement formulieren*/
            stmt = verbinde.createStatement();

            /* Lokale Variablen */
            String pr_name = p.getPr_name();
            String pr_beschreibung = p.getPr_beschreibung();
            double pr_preis = p.getPr_preis();
            double pr_menge = p.getPr_menge();
            int pr_barcode = p.getPr_barcode();
            String pr_gruppe = p.getPr_gruppe();

            /* Statement updaten */
            stmt.executeUpdate("INSERT INTO produkt_tab (pr_name,pr_beschreibung,pr_preis,pr_menge,pr_barcode,pr_gruppe) VALUES('" + pr_name + "' , '" + pr_beschreibung + "' , '" + null/*Bild*/ + "' , '" + pr_preis + "' , '" + pr_menge + "' , '" + pr_barcode + "' , '" + pr_gruppe + "')");



            /* Nur Prüfen - später löschen*/
            ResultSet rs = stmt.executeQuery("SELECT * FROM produkt");
            while (rs.next()) {
                System.out.println("Produkt: " + rs.getString("name"));
            }
        }
        /*catch abschließen*/
        catch (SQLException exc) {
            System.err.println(exc.getMessage());
        }

    }

     public Produkt Datenbank_ausgabe(){
         /* try öffnen*/
        try{
         /*Statement formulieren*/
            stmt = verbinde.createStatement();
            /*Formuliertes Statement und Ausgabe einem Ergebnis zurückgeben*/
            /**
             * SELECT * FROM Datenbank
             */
            ResultSet erg = stmt.executeQuery("SELECT * FROM produkt_tab");
            /*Ausgabe*/
             while (erg.next()) {
             /* Produkte füllen mit Argumenten*/
              p = Produkt.erstelleProdukt(erg.getString("pr_name"), erg.getString("pr_beschreibung"),
                          null, erg.getDouble("pr_preis"), erg.getInt("pr_menge"), erg.getInt("pr_barcode"),
                          erg.getString("pr_gruppe"));
              /* Produkt der Produktliste hinzufügen. */
              /* Klassenmethoden aufrufen - static */
              Produktliste.hinzuProduktliste(p);
              /* Ausgabe : Prüfen */
              Produktliste.ausgabeProduktliste();
             /*Daten ans TableModel übergeben*/
             
              

             }

           }
        /*catch abschließen*/
        catch (SQLException exc) {
			System.err.println(exc.getMessage());
	}
         return p;
     }


    

    public void zuDatenbank_verbinden(){
        /* try öffnen*/
        try{
        /*Treiber laden*/
            Class.forName("com.mysql.jdbc.Driver");
        }
        /*catch abschließen*/
        catch (ClassNotFoundException exc){
			System.err.println("Treiber nicht gefunden!" + exc.getMessage());
			System.exit(-1);
	}
        /* try öffnen*/
        try{
            /*Anmelden und Authentifizieren*/
            verbinde = DriverManager.getConnection(getUrl(), getBenutzer(), getPasswort());

        }
        /*catch abschließen*/
        catch (SQLException exc) {
			System.err.println(exc.getMessage());
	}
   }

    /**
     * @return the url
     */
    public String getUrl() {
        return url;
    }

    /**
     * @param url the url to set
     */
    public void setUrl(String url) {
        this.url = url;
    }

    /**
     * @return the benutzer
     */
    public String getBenutzer() {
        return benutzer;
    }

    /**
     * @param benutzer the benutzer to set
     */
    public void setBenutzer(String benutzer) {
        this.benutzer = benutzer;
    }

    /**
     * @return the passwort
     */
    public String getPasswort() {
        return passwort;
    }

    /**
     * @param passwort the passwort to set
     */
    public void setPasswort(String passwort) {
        this.passwort = passwort;
    }
}
```


----------



## ARadauer (19. Nov 2009)

Ich hab das mal für ein Projekt gebraucht.. vielleicht hilft dir das... das ließt Tabellen aus einer Oracle DB aus...

```
DatabaseMetaData meta = connection.getConnection().getMetaData();
      String schema = "ABCD";
      ResultSet tables= meta.getTables(null,schema,"%",null);
      while(tables.next()) {
         String table = tables.getString(3);
          ResultSet columns = meta.getColumns(null, schema, table, "%");
         ArrayList<String> columnList = new ArrayList<String>();
         while(columns.next()){
            String column = columns.getString(4);
            columnList.add(column);            
         }        
      }  
         
      }
```

mhn show tables müsste doch auch gehen.... moment

hab jetzt hier leider keine mysql Datenbank und bei oracle gibt es ein show tables...

aber so in der richtung sollte es gehen...


```
public ArrayList<String> getTabellen()
  {
     ArrayList<String> tabellen = new ArrayList<String>();
      ResultSet rs = null;
      try
      {
          // Satement erstellen
          Statement st = conn.createStatement();
          // Befehl absetzen
          rs = st.executeQuery("SHOW TABLES");   
        
          while (rs.next()){
             tabellen.add(rs.getString(1));
          }
      } catch (SQLException e)
      {
          e.printStackTrace();
      }

      return tabellen;
  }
```


----------



## ElBobby (19. Nov 2009)

Wunderbar ! Es klappt.
Der Code :

```
{
     ArrayList<String> tabellen = new ArrayList<String>();
      ResultSet rs = null;
      try
      {
          // Satement erstellen
          Statement st = conn.createStatement();
          // Befehl absetzen
          rs = st.executeQuery("SHOW TABLES");   
        
          while (rs.next()){
             tabellen.add(rs.getString(1));
          }
      } catch (SQLException e)
      {
          e.printStackTrace();
      }
 
      return tabellen;
  }
```

war die Lösung. 

Danke.

Kurze Frage noch zum Resultset. Wozu eigentluch der Metadatenumweg? 
Und mittels rs.getString() kann ich alle beliebigen Spaltenabgreifen? Zum Beispiel:

```
rs.getString("Spalte0")
rs.getString("Spalte1")
rs.next()
rs.getString("Spalte0")
rs.getString("Spalte1")
rs.next()
rs.getString("Spalte n")
rs.getString("Spalte n+1")
```

Ist das korrekt?


----------

