MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht

generalofgermany

Neues Mitglied
Hey ich bin neu hier und hätte gleich mal eine Frage an der ich echt schon lange sitze.

Das Problem ist folgendes: ich möchte Mithilfe von jdbc, ucanaccess und einer .accdb Datenbank deren Werte auslesen, um dann ein, für MySQL lesbares Script anzufertigen.
Wenn ich nun allerdings aus meiner Testdatei die Primärschlüssel auslesen will, so bekomme ich manchmal welche und manchmal nicht :-(

Mit diesem Code hier extrahiere ich die Infos aus der Datei.



Java:
private Connection conn;
    private Statement stmt;
    private ResultSet rs;
    private DatabaseMetaData dbmd;

    public ACCDB_DB(String pPfad) throws SQLException
    {
        conn = DriverManager.getConnection("jdbc:ucanaccess://"+pPfad);
        dbmd = conn.getMetaData();
    }

    public ArrayList getTables() throws SQLException
    {
        ArrayList<String> ret = new ArrayList();
        rs = dbmd.getTables(null, null, null, null);
        while(rs.next())
        {
            ret.add(rs.getString("TABLE_NAME"));
        }

        return ret;
    }

    public ArrayList getColumns(String pTable) throws SQLException
    {
        ArrayList<String> ret = new ArrayList();

        rs = dbmd.getColumns(null, null, pTable, null);

        while(rs.next())
        {

            String add = rs.getString("COLUMN_NAME")+" "+rs.getString("TYPE_NAME");
            if(rs.getString("TYPE_NAME") != "BOOLEAN" && rs.getString("TYPE_NAME") != "TIMESTAMP"
                    && rs.getString("TYPE_NAME") != "DECIMAL")
                add+=" ("+rs.getString("COLUMN_SIZE")+")";
           
            if((rs.getString("IS_AUTOINCREMENT").toUpperCase()) == "YES")
            {
                add = add+" AUTO_INCREMENT";
            }
           

            ret.add(add);

        }
        return ret;
    }

    public ArrayList<String> getPrimaryKeys(String pTable) throws SQLException
    {
        ArrayList<String> ret = new ArrayList<String>();

        rs = dbmd.getImportedKeys(null, null, pTable);

        while(rs.next())
        {
            ret.add("PRIMARY KEY ("+rs.getString("PKCOLUMN_NAME")+")");
        }

        return ret;
    }

Die Daten werden dann zusammengefügt und bei meiner Testdatei mit 4 Tabellen kommt dann folgendes raus:

Code:
CREATE TABLE IF NOT EXISTS angestellter(
personalnr INTEGER (32),
abteilung VARCHAR (255),
urlaubstage INTEGER (32),
PRIMARY KEY (personalnr));

CREATE TABLE IF NOT EXISTS manager(
personalnr INTEGER (32),
abteilungsleiter BOOLEAN,
geschaeftsfuehrer BOOLEAN,
PRIMARY KEY (personalnr));

CREATE TABLE IF NOT EXISTS person(
personalnr INTEGER (32),
name VARCHAR (255),
vorname VARCHAR (255),
geburtsdatum TIMESTAMP,
gehalt DECIMAL);

CREATE TABLE IF NOT EXISTS test(
test1 VARCHAR (255),
test2 VARCHAR (16777216),
test3 INTEGER (32),
test4 BIGINT (64),
test5 TIMESTAMP,
test6 DECIMAL,
test7 INTEGER (32),
test8 BOOLEAN,
test9 VARBINARY (16777216),
test10 VARCHAR (16777216));

Aber sowohl Person, als auch Test haben Primärschlüssel :confused:

Außerdem scheint Auto-Increment nicht zu funktionieren, was mich ziemlich wundert, da ich da genau nach Maßgabe vorging.
Und ich konnte leider nirgends erfahren, wie ich die anderen Attribute, wie unsigned herausfinde. Ich hab es gegoogelt, aber irgendwie scheinen die Befehle rs.isSigned() o.ä. bei meinen Bibliotheken nicht dabei zu sein.

Es wäre auch echt noch mega hilfreich, wenn man rausfinden könnte, was man bei rs.getString("COLUMN_NAME") statt Column_Name noch so alles eingeben kann. Auch da hab ich ne Anleitung gefunden, aber auch diese Befehle finden sich in meinen Bibliotheken scheinbar nicht.

Jetzt hab ich aber ganz schön viel gefragt. Sorry.

Auf jeden Fall schon mal vielen Dank im Voraus.

MfG
LT
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Du willst getPrimaryKeys. getImportedKeys liefert nur die Primärschlüssel, die von anderen Tabellen als Foreign Keys verwendet werden.

Auch da hab ich ne Anleitung gefunden, aber auch diese Befehle finden sich in meinen Bibliotheken scheinbar nicht.
Es gibt für die Java-APIs eine super Doku. Wenn Du mal https://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html öffnest und dort getColumns raussuchst und ggf. noch draufklickst, dann bekommst Du alles, was Du wissen willst.
 

generalofgermany

Neues Mitglied
Du willst getPrimaryKeys. getImportedKeys liefert nur die Primärschlüssel, die von anderen Tabellen als Foreign Keys verwendet werden.


Es gibt für die Java-APIs eine super Doku. Wenn Du mal https://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html öffnest und dort getColumns raussuchst und ggf. noch draufklickst, dann bekommst Du alles, was Du wissen willst.

Erstmal Danke.
Ich war auch schon auf der Seite und muss sagen, dass ich mich jetzt etwas wundere, was ich denn da übersehen konnte. Naja hatte wohl einen Tunnelblick:oops:

Das mit PrimaryKeys ist eigentlich auch logisch. Ich finde die SQL-Api trotzdem etwas blöd.

Aber das hilft mir auf jeden fall schon mal sehr👍

MfG
LT
 

mihe7

Top Contributor
Ich finde die SQL-Api trotzdem etwas blöd.
Eigentlich ist das ziemlich Cool: eine API, die vom SQL information_schema abstrahiert und somit einen einheitlichen Zugriff auf Metadaten auch für DBMS gewährt, die selbst das information_schema nicht implementieren (z. B. Access; zumindest in älteren Versionen). Ansonsten könntest Du auch einfach mittels SELECT * FROM information_schema.columns arbeiten. S. http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt, Abschnitt 21.2.9 (Strg+F)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
D Asynchrone Aufrufe mit jdbc Datenbankprogrammierung 5
Edin JDBC Hilfe Datenbankprogrammierung 2
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Husamoli345 JSF-JDBC Verbindung Crud Datenbankprogrammierung 15
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
J JDBC anschaulich präsentieren Datenbankprogrammierung 2
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
ralfb1105 Oracle JDBC Debugging Datenbankprogrammierung 8
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
Thallius MySQL jdbc schließt Verbindung nach vielen Request von selber Datenbankprogrammierung 8
B MySQL JDBC Kommentarfilter Datenbankprogrammierung 4
Aruetiise MySQL Name JDBC Drive finden Datenbankprogrammierung 4
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
Thallius MySQL Merkwürdiges JDBC Verhalten bei VPN Verbindung. Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
F MySQL JDBC Problem Datenbankprogrammierung 5
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
looparda SQLite Active JDBC Abstraktion Datenbankprogrammierung 2
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
J RESTServie + JDBC + No suitable driver found for jdbc Datenbankprogrammierung 4
KaffeeFan JDBC/ODBC-Bridge entfernt Datenbankprogrammierung 4
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
J Fehlende DatenbankView nach einbeziehen von JDBC Datenbankprogrammierung 3
A Mit JDBC auf postgreSQL Datenbank zugreifen Datenbankprogrammierung 5
C PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL Datenbankprogrammierung 2
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
S JDBC mit Postgres DB connecten Datenbankprogrammierung 3
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
D JDBC - Verständnisfrage Datenbankprogrammierung 2
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
L Conversion-Error bei JDBC Date Literals Datenbankprogrammierung 3
X MySQL DB-verbindung ohne JDBC/ODBC Datenbankprogrammierung 1
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
U JDBC prepaird Statements Datenbankprogrammierung 4
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
R Transaktionen von mehreren Anwendungen aus - JDBC Datenbankprogrammierung 3
N MySQL com.microsoft.sqlserver.jdbc.SQLServerException: Die Verbindung wurde geschlossen. Datenbankprogrammierung 1
N JDBC: rollback() bei Exception geht nicht!? Datenbankprogrammierung 1
C Dateipfad des jdbc Treibers Datenbankprogrammierung 2
G JDBC Connect nur über SID fehlerfrei möglich Datenbankprogrammierung 2
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T JDBC Fehler Datenbankprogrammierung 2
J JDBC via Singleton Datenbankprogrammierung 12
Z PostgreSQL JDBC mit Postgresql Datenbankprogrammierung 2
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7
K JDBC via Netzwerk Datenbankprogrammierung 4
B JDBC Connection Fehler Datenbankprogrammierung 8
K JDBC- In Java "stored procedure" erstellen für DB2,OracleSql ... Datenbankprogrammierung 3
J JDBC in Library|"Treiber konnte nicht geladen werden"" Datenbankprogrammierung 2
B JDBC-Connection: Data source name too long Datenbankprogrammierung 3
D JDBC insert mit select abfrage Datenbankprogrammierung 5
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
H JDBC prüfen ob Table existiert Datenbankprogrammierung 3
crashfinger jdbc-connection mit jre7 funktioniert nicht Datenbankprogrammierung 5
0 JDBC Oracle Verbindungsaufbau Datenbankprogrammierung 6
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
B JDBC MySQL Statement Datenbankprogrammierung 3
F Oracle Oracle JDBC Anbindung unter Glassfish 3.1.2 Datenbankprogrammierung 3
V PostgreSQL JDBC Treiber fehlt Datenbankprogrammierung 6
Y JDBC - Datenbankabfrage Webserver Datenbankprogrammierung 4
C JDBC Datenbank funktioniert nicht Datenbankprogrammierung 7
C JDBC , JDO oder JPA Datenbankprogrammierung 17
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
P JDBC Verbindung zur DB klappt nicht Datenbankprogrammierung 6
J Java - JDBC Verbindung zur Datenbank nicht möglich Datenbankprogrammierung 10
K JDBC Buch kaufen? Datenbankprogrammierung 3
K Hibernate vs. JDBC Datenbankprogrammierung 4
K JDBC Driver not found Datenbankprogrammierung 10
GianaSisters Per JDBC auf Microsoft SQL 2005 Datenbankprogrammierung 24
S ich brauche tipps für JDBC Datenbankprogrammierung 4
Paristick MSSQL - JDBC Exception beim Registrieren Datenbankprogrammierung 5
S Applet stucks at SQL Connection (jTDS JDBC) Datenbankprogrammierung 15
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
c_sidi90 JDBC Oracle Connection schlägt fehl Datenbankprogrammierung 2
J jdbc-dataSource in Klassen nutzen Datenbankprogrammierung 2
H Rechnen in Datenbanken - JDBC Mittel der Wahl? Datenbankprogrammierung 32
K MySQL JDBC - Access Datenbank - unbekannter TabellenName Datenbankprogrammierung 4
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
J MySQL Verbindung über JDBC scheitert immer Datenbankprogrammierung 2
I Master/Detail Tabellen mit JDBC und Swing Datenbankprogrammierung 10
S MSSQL JDBC "Driver class not found" Datenbankprogrammierung 9
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
ruutaiokwu jdbc connection als singleton Datenbankprogrammierung 11
J MySQL Löschen von Rows mit JDBC Datenbankprogrammierung 9
G JDBC Exception Datenbankprogrammierung 3
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
F Fehlerhandling bei JDBC Datenbankprogrammierung 9
T JDBC und Arrays Datenbankprogrammierung 7
X Oracle JDBC und Joins? Datenbankprogrammierung 7
A No suitable driver found for jdbc:microsoft:sqlserver... Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben