# Prüfen ob Tabelle schon vorhanden



## KimKaze (22. Apr 2008)

Hallo,

ich baue eine Verbindung zu einer DB auf und möchte darin eine Tabelle erstellen
allerdings
wenn es die tabelle bereits gibt soll er sie erst löschen.

wie sieht die abfrage dafür aus

hier ein kleines stück code

```
Statement smt = verbindung.createStatement();

                                if(????????? Tabelle schon vorhanden?????????????)
                                {
				     smt.execute("DROP TABLE AlleLaender");
				     System.out.println("AlleLaender gelöscht");
				} else {

				     smt.execute("CREATE TABLE AlleLaender (Kuerzel varchar (10), Name varchar (100), PRIMARY KEY (Name))");
                                }
```

wie sieht die abfrage im if() aus?


----------



## FenchelT (22. Apr 2008)

Fuer den MSSQL Server z.B. so:



```
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[Test]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)   
DROP TABLE [dbo].[Test]
GO 
CREATE TABLE [Test] (
  [id] [int] IDENTITY (1,1) NOT NULL,
  [loekz] [varchar](1) NOT NULL,
  [anldat] [datetime] NOT NULL,
  [anlben] [varchar](15) NOT NULL,
  [aendat] [datetime] NOT NULL,
  [aenben] [varchar](15) NOT NULL,
  [loedat] [datetime] NOT NULL,
  [loeben] [varchar](15) NOT NULL) 
GO 
ALTER TABLE [Bewerber] ADD CONSTRAINT pk_Test PRIMARY KEY (id)
```


Fuer mySql z.B. so:


```
DROP TABLE IF EXISTS `Test`;
CREATE TABLE Test(
  `id` integer unsigned NOT NULL auto_increment,
  `loekz` varchar(1) NOT NULL,
  `anldat` datetime NOT NULL,
  `anlben` varchar(15) NOT NULL,
  `aendat` datetime NOT NULL,
  `aenben` varchar(15) NOT NULL,
  `loedat` datetime NOT NULL,
  `loeben` varchar(15) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
```


EDIT:  Das laesst Du natuerlich alles die DB pruefen und nicht JAva. Heisst, Du packst das alles in einen SQL String und laesst den ausfuehren


----------



## Michael... (22. Apr 2008)

wenn die Tabelle grundsätzlich gelöscht werden soll, ist es doch egal ob sie existiert. Das Drop-Statement kann man idann in jedem Fall absetzen - ist wahrscheinlich weniger aufwendig, als vorher zu prüfen, ob die Tabelle existiert.


----------



## maki (22. Apr 2008)

Michael... hat gesagt.:
			
		

> wenn die Tabelle grundsätzlich gelöscht werden soll, ist es doch egal ob sie existiert. Das Drop-Statement kann man idann in jedem Fall absetzen - ist wahrscheinlich weniger aufwendig, als vorher zu prüfen, ob die Tabelle existiert.


Die Tatsache das es einen Fehler gibt wenn man eine nicht vorhandene Tabelle löschen möchte sollte man nicht ignorieren.


----------



## ARadauer (22. Apr 2008)

> Die Tatsache das es einen Fehler gibt wenn man eine nicht vorhandene Tabelle löschen möchte sollte man nicht ignorieren.


diese Exception kann man aber leicht abfangen, sollte kein Problem darstellen


----------



## maki (22. Apr 2008)

Aber dann ist der Rest des Staements nicht ausgeführt worden... ich verstehe auch "den ganzen Aufwand ehrlich gesagt nicht.


----------



## KimKaze (22. Apr 2008)

ok ich dachte da gäbs ne etwas elegantere läösung, habs dann einfach so gemacht
hier code wenn einer gleiche problem hat


```
try{
				smt.execute("DROP TABLE AlleLaender");
				System.out.println("AlleLaender gelöscht");
				}catch(Exception e){
					
				}
```


----------



## tfa (22. Apr 2008)

Das ist aber eine schlechte Lösung. Wenn es eine Möglichkeit gibt, das ganze ohne "gewollte" Exception durchzuführen, sollte man das auch machen. 
Außerdem fängst du pauschal alle Exceptions. Was ist, wenn eine geworfen wurde, die gar nichts mit dem "DROP TABLE" zu tun hat? Die verschluckst du dann ohne Meldung. Viel Spaß bei der Fehlersuche.


----------

