# JDBC prüfen ob Table existiert



## hklaudia (18. Sep 2012)

Hallo..

Ich möchte beim Aufruf eines Programms gleich in einem Konstruktor prüfen ob eine Tabelle in meiner JDBC existiert oder nicht, wenn nicht, dann wird sie erstellt.. ich hab einen Tipp bekommen es mit dem DatabaseMetaData zu tun..aber das funktioniert nicht so wie ich es will, also versteh ich wohl etwas nicht ganz. Bitte um Hilfe 


```
try {
			conn = DriverManager.getConnection("jdbc:derby:C:\\Klaudia\\Java\\Beispiele\\Gitarrengriffe\\DB\\work.db;create=true");
			System.out.println("Connection established");
		
			DatabaseMetaData dm = conn.getMetaData();
			rs = dm.getTables(null, null, "griffe", null);
			stmt = conn.createStatement();
			
			if(!rs.next()){
				String sc = "CREATE TABLE griffe (" +
						"name  VARCHAR(10) NOT NULL," +
						"e_Saite      VARCHAR(2)," +
						"bSaite      VARCHAR(2)," +
						"gSaite      VARCHAR(2)," +
						"dSaite      VARCHAR(2)," +
						"aSaite      VARCHAR(2)," +
						"eSaite      VARCHAR(2)," +
						"PRIMARY KEY(name))";
				stmt.executeUpdate(sc);
				System.out.println("Table created");
			} else {
				System.out.println("Table exists");
			}
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		finally {
			try {
				if (stmt != null)
					stmt.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				System.out.println(e.getMessage());
				e.printStackTrace();
				return;
			}
		}
```

Als Fehler kommt dann: java.sql.SQLException: Table/View 'GRIFFE' already exists in Schema 'APP'.


----------



## stone71 (18. Sep 2012)

Hi,

ich bin nicht ganz im Bilde, ob in den neueren JavaDB Versionen jetzt eine Möglichkeit existiert, aber was Du suchst ist im Endeffekt ein "create Table if not exist". In manch DB existiert dies, aber in JavaDB meine ich noch nicht. 
Dein Fehler weißt Dich darauf hin, dass Du die Tabelle anlegen möchtest, obwohl diese schon existiert! Es ist zwar wahrscheinlich irgendwie möglich dies so zu prüfen, wie Du dies machst, aber warum machst Du kein select auf die Tabelle und im Fall dieser geworfenen Exception, legst Du die Tabelle neu an! 

Die einfachste Möglichkeit ist das Ausführen des creates, aber hier muss Du einfach die Exception leer lassen ("häßlich, aber auch eine Möglichkeit"). 

Die Lösungen werden Dir auf einigen Seiten erklärt. 
Ein Beispiel:Create Table IF NOT EXISTS … in JavaDB/Derby  Frickelblog

Also dies nur ein kleiner Vorgeschmack... Bei weiteren Fragen stehe ich gerne zur Verfügung. Ich schaue auch noch einmal, wie es anders möglich ist.

Grüße !


----------



## stone71 (18. Sep 2012)

Noch was gefunden...

Hier gab es auch schon einmal die Frage:
http://www.java-forum.org/datenbankprogrammierung/116873-fehler-beim-erstellen-tabelle.html

Hoffe dies hilft weiter!?


----------



## hklaudia (18. Sep 2012)

danke! also hat einfach gereicht die exception leer zu lassen xD ich lass das mal so, auch wenns nicht die schönste lösung ist


----------

