# analoge technologie zu OPEN SQL in java



## rambozola (24. Jan 2007)

hi leute,

gibt es in java eine möglichkeit ein programm zu schreiben, dass auf db´s zugreift und dem es völlig egal ist ob da eine oracle- oder mysql- oder ms sql-db angesprochen werden?

das problem ist das z. B. oracle und mysql eine leicht andere syntax haben und wenn man die db wechselt müsste das programm umgeschrieben werden.

in sap gibt es open sql. dieser technik ist es egal was für eine db nun dahintersteckt.

gibt es da etwas vergleichbares in java? mit jdbc muss ich ja immer die sql-befehle im code der db anpassen.


----------



## KSG9|sebastian (24. Jan 2007)

Eine API dafür kenne ich nicht. Über die bekannten O/R-Mappingtools (Hibernate und Co.) hast du aber genau diese Möglichkeit.
Jedoch musst du dein Programm dann auf Hibernate oder welchen O/R-Mapper auch immer umbauen.

Wie soll das eigentlich funktionieren was du da suchst? Da die Syntax teilweise sehr verschieden ist frage ich mich wie es möglich sein soll da ein "Universal-SQL" zu bieten. Das kann doch nur ein fast Funktionsloses Teil auf kleinstem gemeinsamem Nenner werden. Und wenn man den kleinsten gemeinsamen Nenner von MySQL, Oracle, DB/2, Derby u.s.w. nimmt dann wird man ungefähr richtung 0 gehen?

Gruß sebastian


----------



## rambozola (24. Jan 2007)

danke KSG9|sebastian für deine antwort...

ja du hast recht...open sql ist nur eine untermenge vom sql-standard...soso mit hibernate also...was ist da das prinzip...oder hast du nen link mit nem ganz simplen tutorial oder codezeilen?


----------



## bronks (24. Jan 2007)

rambozola hat gesagt.:
			
		

> ...soso mit hibernate also...


Ich wette, daß bei alter und create eine von den Datenbanken durchfallen wird.

Doku mit einfachen Beispielen findest Du auf www.hibernate.org


----------



## rambozola (24. Jan 2007)

danke bronks für deine antwort...

hat schon jemand erfahrungen mit hibernate?


----------



## sparrow (24. Jan 2007)

rambozola hat gesagt.:
			
		

> hat schon jemand erfahrungen mit hibernate?



Ich habe vor einiger Zeit damit herumprobiert, allerdings war es mir persönlich zu kompliziert. Ich wollte nicht die das Programm und dessn Logik hochziehen und dabei das Risiko eingehen, dass ich bei dem Entwurf der Datenbank enen Fehler mache weil ich mich zusätzlich noch mit Hibernate auseinander setzen muss. 
Ich bin dann letztendlich doch bei PostgreSQL geblieben.

Ich habe damals darüber nachgedacht einfach die Grundbasis des SQL-Syntax zu verwenden. Die Grundsachen wie dei Datenfelder unterscheiden sich ja in den einzelnen Datenbanken nicht so sehr. Und so Sachen wie Sequenzen hätte ich dann im Programm selber umgesetzt.

Ich scheiterte aber sehr schnell, da einige Datenbanken Sachen die für mich selbstverständlich und wichtig waren (Transaktionen/Rollbacks, Subqueries, Zugriffssperre auf Datensatzebene) ganz einfach nicht anboten.

Bei Hibernate stieß ich sehr schnell an meine Grenzen da ich bei einer hochfrequentierten Tabelle mit mehreren Millionen Datensätzen Probleme bei der Performance bekam. Das könnte aber auch auf meinem Unwissen über Hibernate basieren. Ich löste das damals indem ich Hibernate als Mittler wieder heraus nahm und entsprechende Indexe und Selections-Optimierungen in der Datenbank und im Code vornahm.


----------



## KSG9|sebastian (25. Jan 2007)

Ich mach recht viel mit Hibernate.
Das Problem bei dem ganzen ist dass du viel Zeit für optimale Konfiguration benötigst. Wenn du das nicht tust hast du extreme Performanceeinbußen.
Im Hibernateforum findest du viele hilfreiche Sachen, Google spuckt auch viel gute Ergebnisse aus.

@bronks: Was meinst du mit "bei alter und create durchfallen"?


----------



## bronks (25. Jan 2007)

KSG9|sebastian hat gesagt.:
			
		

> ... @bronks: Was meinst du mit "bei alter und create durchfallen"?


Ich meinte damit, daß eine der o.g. Datenbanken die von Hibernate erzeugten Statement für create und alter nicht festehen und mit Fehlermeldungen um sich schmeissen wird.


----------



## sparrow (25. Jan 2007)

bronks hat gesagt.:
			
		

> KSG9|sebastian hat gesagt.:
> 
> 
> 
> ...



Kommt drauf an ob Hibernate die Datenbank unterstützt. Tut es das wird es keine Fehler geben, dafür ist es ja da.


----------



## bronks (25. Jan 2007)

sparrow hat gesagt.:
			
		

> ... Kommt drauf an ob Hibernate die Datenbank unterstützt. Tut es das wird es keine Fehler geben, dafür ist es ja da.


Hibernate muß keine Datenbank unterstützten, denn Datenbanken verstehen normalerweise ANSI-SQL, aber das kann man von MySql doch nicht verlangen ...


----------



## Guest (25. Jan 2007)

Ich werfe mal "Toplink" von Oracle in die Runde, als eine Alternative zu Hibernate als JPA-Implementierung.

http://www.oracle.com/technology/products/ias/toplink/JPA/index.html
http://www.oracle.com/technology/pub/articles/gupta-jpa.html


----------



## mephi (25. Jan 2007)

mal am rande(hab noch nie was mit DB gemacht)
kann man nicht einfach eine abfrage oder kontrolle einbauen mit der kontrolliert oder eingegeben wird auf was für eine datenbank man zugreift und dann jeweils ein modul für eine DB einbaut?


----------



## Guest (25. Jan 2007)

mephi hat gesagt.:
			
		

> mal am rande(hab noch nie was mit DB gemacht)
> kann man nicht einfach eine abfrage oder kontrolle einbauen mit der kontrolliert oder eingegeben wird auf was für eine datenbank man zugreift und dann jeweils ein modul für eine DB einbaut?


Lese mal das hier durch.

EJB Persistenz mit Java SE

Teil 1: http://www.zdnet.de/builder/program/0,39023551,39142744,00.htm
Teil 2: http://www.zdnet.de/builder/program/0,39023551,39143624,00.htm
Teil 3: http://www.zdnet.de/builder/program/0,39023551,39143875,00.htm


----------

