DatabaseMetaData

Hallo an alle Java-Freunde ist möglich wenn ich eine Tabelle mit NetBeans erstellte Code in einer msql-Datenbank einfüge in mein fall Tabelle1 ,wenn ich es über DatabaseMetaData in einer Tabelle, die ich selbst mit NetBeans erstellt habe diese spiegele , in den spalten
neben dem Tabellennamen (Tabelle1) auch Name, Datum, von wem es erstellt wurde, den ich natürlich beim erstellen der neue Tabelle diese Daten eingeben soll. Im Moment kann ich nur den Tabellennamen lesen mit dem Code, den ich unten gepostet habe Danke.
Spalte 1 | Spalte 2| Spalte 3
Tabelle1 | Name | Datum

Code:
  public void Show_Metadata_In_JTable() throws SQLException
    {
Connection con=getConnection();
 
  DefaultTableModel model = (DefaultTableModel)Tabelle_Jtabel.getModel();
      try{
        String[] types = {"TABLE"};
        DatabaseMetaData metadata = con.getMetaData();
        ResultSet resultSet = metadata.getTables(null, null, "%", types);
         while (resultSet.next())
            {
          Vector row = new Vector();
                row.addElement( resultSet.getString(3) );
                model.addRow(row);
            }
         } catch (SQLException ex) {
               Logger.getLogger(Admin_system.class.getName()).log(Level.SEVERE, null, ex);
            
            }
         }
 
Aber wenn ich über DatabaseMetaData dem Tabellennamen (Tabelle1) zb.
spiegele auf der gleiche reie der Tabelle1 die andere info habe Name1,Datum1
Nehmen wier an es wurden mit NetBeans erstellte Code in einer msql-Datenbank
3 Tabellen erstellt (tabelle1,tabelle2,tabelle3) und ich spiegele die 3 tabellen
daneben will ich die andere info haben auf der gleiche Tabelle.
vielleicht habe ich mich nicht richtig ausgedrückt, Entschuldigung für meinen nicht so guten Deutsch
Spalte 1 | Spalte 2| Spalte 3
Tabelle1 | Name1 | Datum1
Tabelle2 | Name2 | Datum3
Tabelle3 | Name3 | Datum3
 

mihe7

Top Contributor
Ich habe Dich schon verstanden. Du fügst ja jeweils eine Zeile zur JTable hinzu. Die besteht aktuell ja nur aus dem Tabellennamen. Du kannst aber doch weitere Werte dazunehmen, z. B.
Java:
String tableName = resultSet.getString(3);
String creator = "Name1";
String dayOfCreation = "2019-01-01";
Vector row = new Vector();
row.addElement( tableName );
row.addElement( creator );
row.addElement( dayOfCreation );
model.addRow(row);
Du musst also lediglich creator und dayOfCreation in Abhängigkeit von tableName aus Deiner DB ermitteln.
 
Habe ich es richtig verstanden wenn ich zb.
--create table tabelle1 -erstelle ,creator und dayOfCreation nicht in dieser erstelte tabelle eingeben soll
sondern in ein anderen erstelte --create table tabelleanderendaten - eingeben soll.
 
Zuletzt bearbeitet:
Oder wen ich zb create table tabelle1 -erstelle parallel dazu die
anderen daten creator und dayOfCreationnicht in anderen ort speicher, haber wie
mache ich das wenn ich über DatabaseMetaData spiegele
tabelle1 in der gleiche reie von den anderen creator und dayOfCreation ist
 

Thallius

Top Contributor
Ich kann leider nicht verstehen was das Ziel deines Anliegens sein soll aber ich kann dir aus langjähriger Erfahrung sagen, das das erstellen von Datenbank Tabellen dynamisch im code nur in 1 vom 1000 fällen sinnvoll ist. In allen anderen Fällen handelt es sich dabei um ein falsches Konzept.

Gruß

Claus
 
Danke für die hilfe ,ich wolte erreichen wenn ein benutzer über eine
benutzeroberfläche eine Tabelle in eine datenbank erstellt
das über DatabaseMetaData nicht nur den Name der Tabelle
hole sondern auch anderen daten die der benutzer in der benutzoberfläche
eingibt , oder gibt es eine andere metode?
 

mihe7

Top Contributor
Habe ich es richtig verstanden wenn ich zb.
--create table tabelle1 -erstelle ,creator und dayOfCreation nicht in dieser erstelte tabelle eingeben soll
sondern in ein anderen erstelte --create table tabelleanderendaten - eingeben soll.
Ja, selbstverständlich. Der Ersteller und der Zeitpunkt der Erstellung sind Metadaten über die erstellte Tabelle. Dafür braucht es eine separate Tabelle.

Du machst also etwas wie
SQL:
CREATE TABLE table_meta (
    table_name VARCHAR(255) NOT NULL,
    creator    VARCHAR(255) NOT NULL,
    created    TIMESTAMP    DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT pk_table_meta PRIMARY KEY (table_name)
);
Optional kannst Du gleich noch die Metadaten über die Metadaten-Tabelle selbst speichern (der Ersteller ist in folgendem INSERT allerdings der Datenbank-Benutzer):
SQL:
INSERT INTO table_meta(table_name, creator)
    SELECT table_name, CURRENT_USER
      FROM INFORMATION_SCHEMA.TABLES
     WHERE lower(table_name)='table_meta';

Immer, wenn Dein Benutzer nun eine Tabelle erstellt, musst Du eine Zeile in table_meta einfügen:
SQL:
INSERT INTO table_meta(table_name, creator) VALUES (:name_der_neuen_tabelle, :benutzername_des_erstellers);

Nachtrag: allerdings sehe ich die Sache wie @Thallius. Warum erstellt ein Benutzer in Deiner Anwendung Tabellen? Was macht Deine Anwendung?
 
Danke mihe7 für die hilfe, es funktioniert so weit
Haber wen der Benutzer eine neue tabelle hinzufügt
und diese Tabellen name exisistiert habe ich den eintrach doppelt
ich habe es mit ---CREATE TABLE IF NOT EXISTS-- probiert
haber wird iignoriert wen der tabelle Name exisistiert wird
trotzdem ausgeführt ,villeicht liegt es an meinen -- XAMPP Version: 5.6.30--

:(
 
Danke Thalius, Benutzer1 gibt über textfelder in ein JavaForm eingaben
die in tabelle1 der Db gespeichert werden soweit so gut.
Benutzer2 gibt über textfelder in den gleichen JavaForm eingaben
die in tabelle2 der Db gespeichert.

Der punkt ist die tabellen werden nicht über die administration von
XAMPP Version: 5.6.30 von mir erstellt sondern von Den Benutzer
selber erstell .

Pro Benutzer eine dbTabelle die er selber über JavaForm erstellt
das funktioniert alles .
Um das schöner zu machen ,die auswall der Tabellen wolte ich
nicht über das Combobox damit ich die in Jtable sehe
Sonder anders.
aber vielleicht habe ich mich nicht richtig ausgedrückt
 

mihe7

Top Contributor
Du musst nur ein einziges mal die Tabelle table_meta (z. B. über phpMyAdmin) anlegen. Wenn ein Benutzer eine neue Tabelle anlegt, fügst Du per INSERT den Namen der neuen Tabelle und den Namen des Benutzers in table_meta ein.
 
Das Funkioniert auch , Wenn haber ein Benutzer eine neue Tabelle anlegt und die Tabelle existiert wird natürlich
nicht in db eingefügt, haber in die table_meta ja im Datensatz/Record alz hätte ich zwei gleichen namen
 

mihe7

Top Contributor
Wenn haber ein Benutzer eine neue Tabelle anlegt und die Tabelle existiert wird natürlich
nicht in db eingefügt, haber in die table_meta ja im Datensatz/Record alz hätte ich zwei gleichen namen
Du kannst jetzt über die Tabelle table_meta einfach feststellen, ob die Tabelle bereits existiert... Dein Programm muss doch lediglich z. B. über die Tabelle table_meta feststellen, ob die neue Tabelle bereits existiert. Wenn ja: Fehlermeldung. Wenn nein: neue Tabelle anlegen und in table_meta einfügen.
 

Trjavnamen

Bekanntes Mitglied
Nun ich denke in der Uhrsprungsdatei müßten die zwei Informationen(Benutzer/Datum) mit eingebaut werden. Das ändern sollte dann nur dem jeweiligen Benutzer zur verfügung stehen und neue Datensätze mit Benuzer u. Datum persistent werden. Nur der Administrator sollte dann die Daten bestätigen oder löschen können.
 

Trjavnamen

Bekanntes Mitglied
Bestätigt der Abministrator wechselt der Besitz und Benutzer auf Administrator. Das kann natürlich auch mit einem Radiobutton dem nur dem Administrator zur verfügung steht und ebenfalls in der Tabelle eingebaut wird bewerkstelligt werden. Vorteil er könnte die Daten dem Ursprünglichen Mitarbeiter durch ein einfaches klicken wieder zur verfügung stellen wenn die Daten nochmals korrigiert werden müssen.
 

Ähnliche Java Themen

Neue Themen


Oben