Prüfen ob Tabelle schon vorhanden

Status
Nicht offen für weitere Antworten.

KimKaze

Aktives Mitglied
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
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?
 
Fuer den MSSQL Server z.B. so:


Code:
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:

Code:
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
 
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.
 
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.
 
Aber dann ist der Rest des Staements nicht ausgeführt worden... ich verstehe auch "den ganzen Aufwand ehrlich gesagt nicht.
 
ok ich dachte da gäbs ne etwas elegantere läösung, habs dann einfach so gemacht
hier code wenn einer gleiche problem hat

Code:
try{
				smt.execute("DROP TABLE AlleLaender");
				System.out.println("AlleLaender gelöscht");
				}catch(Exception e){
					
				}
 
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.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben