# UCanAccess / MS Access - Tabelle / Spalte vorhanden



## Dommschwenker (23. Jan 2016)

Hallo,

ich versuche per ucanaccess auf eine MS-Access-Datenbank zuzugreifen.

Die Verbindung funktioniert auch.

Jetzt würde ich gerne überprüfen lassen, ob eine Tabelle vorhanden ist und falls nicht, diese anlegen lassen bzw. wenn diese vorhanden wäre prüfen ob die einzelnen Spalten vorhanden sind.

Hier mal mein Versuch, aber irgendwie stürzt der bereits bei der zweiten Zeile ab, da die Tabelle nicht vorhanden ist.


```
try {
                    sql = "SELECT * FROM tab_version";
                    pst = con.prepareStatement(sql);
                    rs = pst.executeQuery();
                    if (!rs.next()) {
                            info = info + "Tabelle nicht vorhanden ... wird angelegt ...";
                            txa_update.setText(info);
                            sql = "CREATE TABLE tab_version (id COUNTER CONSTRAINT PrimaryKey PRIMARY KEY, version TEXT, build TEXT, beschreibung MEMO)";
                            pst = con.prepareStatement(sql);
                            pst.execute();
                            pst.close();
                            info = info + " Tabelle wurde angelegt ... ok";
                    } else {
                    // hier werden die einzelnen Spalten überprüft   
                    }
                    txa_update.setText(info);
                } catch (SQLException e) {
                        JOptionPane.showMessageDialog(null, "Datenbankfehler: \n" + e, "Fehlermeldung", JOptionPane.ERROR_MESSAGE);
                    }
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, "Allgemeiner Fehler: \n" + e, "Fehlermeldung", JOptionPane.ERROR_MESSAGE);
                }
```

Wie ist es möglich nun mit ucanaccess zu überprüfen, ob eine Tabelle vorhanden ist und falls nicht diese anzulegen? 
Wie wäre der Befehl für die Spalte?

Vielen Dank im Voraus

Gruß
Dommschwenker


----------



## Bitfehler (23. Jan 2016)

Wenn die Tabelle nicht vorhanden ist, kann das SQL-Stmt auch nicht auf die Tabelle ausgeführt werden.

Wie wäre es denn mit folgenden zwei Alternativen:



```
CREATE TABLE IF NOT EXISTS ...
```
Es wird die entsprechende Tabelle angelegt, wenn diese noch nicht vorhanden sein sollte.


```
SHOW TABLES;
```
Gibt dir alle angelegten Tabellen einer Datenbank, dann kannst du vergleichen, ob deine Tabelle schon vorhanden ist.


----------



## Dommschwenker (24. Jan 2016)

Hallo,

hatte die erste Funktionen schon versucht zu nutzen, jedoch scheint diese derzeit noch nicht von UCanAccess unterstützt zu werden.


> net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.3.1 Feature not supported yet.



Ähnlich sieht es auch mit der SHOW-Funktion aus.


> net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.3.1 unexpected token: SHOW


----------



## Bitfehler (24. Jan 2016)

Ok, das UCanAccess kenne ich gar nicht und von Access bin ich kein Freund.

Dann halt:

```
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='DATENBANKNAME;
```


Die Spalten könntest du so bekommen:

```
SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Tabellenname'
```


----------

