# Zwei Fragen über JDBC und MySQL



## wangfeng77 (29. Jan 2007)

Hallo: 
Ich schreibe jetzt ein Programm mit JDBC und MySQL. Hier habe ich zwei Fragen über die Nutzung der JDBC.
Die erst ist über die SQL Datei.  Ich will ein Datenbank und einige Tabelle erstellen. Deshalb habe ich alle SQL-Befehle im Editor geschrieben, gespeichert und in MySQL mit „\.“ getestet.  Aber ich weiß nicht, wie dieser SQL-Datei in JDBC ausgeführt werden kann. Ich habe probiert, mit allgemeine „Statement.execute()“  den Datei durchführen zu lassen.  Leider es geht einfach nicht.
So bitte wer kann mir sagen, wie ich richtig den Code mit JDBC schreiben soll?

Wenn in meinem Programm zwei verschiedene Datenbanken genutzt werden, soll ich die JDBC Connection und Statement Code in eigene Klasse einpacken? Oder für jede DB Verbindung  schreibt eine Class. Und die andere Klasse ruft die „Connection“ Class als Schnittstelle und in eigene Klass schreibt die SQL_Befehle mit Statement(eine von der dreie Sorten).


Pls help me, thx!!!
 :shock:


----------



## SlaterB (29. Jan 2007)

Skripte/ Batche mit JDBC ausführen sieht schlecht aus,
hoffe für dich (und für mich  ), dass noch jemand antwortet wie es geht, 
habe ich bisher aber noch nicht gesehen,

Alternativen: 
MySQL als externes Programm aufrufen (Runtime.run())
oder die Skriptdatei einlesen und einzelne Befehle über JDBC schicken

http://www.galileocomputing.de/open...sel20_010.htm#Rxx747java20010040008371F02310A

-----------

mehrere Datenbanken sollten nur an einer kleinen Stelle im Programm behandelt werden,

es gibt eine zentrale Operation getConnection(evtl. DB-Wahl als Parameter),
darin wird das entschieden,
aller anderer DB-Code lautet
loadXY(Connection c, ..) {
}
und muss sich damit keine Sorgen über die DB machen

(kann natürlich auf verschiedenste Arten gelöst werden)


----------



## KSG9|sebastian (29. Jan 2007)

Wegen Scripten einlesen:

Bei Windows geht's so:

mysql -u <benutzername> -p <datenbank> < <pfad zurm script>

Also, Beispielsweise 
Benutzername: root
Datenbank: test
Pfad zum Script: c:\hallo.sql

mysql -u root -p text < c:\hallo.sql

Für dein nächstes Problem: Das ganze über Interfaces und Abstrakte Klassen soweit machen, dass du im eigentlichen Programm keine Bindung an ne Datenbank hast. Also z.B.


```
public interface DatabaseService(){
   public void save(...);
   public void load(...);
}
public class MySQLServiceImpl implements DatabaseService{

}
public class OracleServiceImpl implements DatabaseService{

}
```

An welcher Stelle du dann die Implementierung erzeugst ist deine Sache. Kannst du z.B. auch über Spring erledigen (Dependency Injection Pattern).
In den Implementierungsklassen hast du dann eine Bindung an die entsprechende DB. In deinem Programm verwendest du aber "nur das Interface".


----------

