2010-11-18 11 views
2

Ich möchte in der Lage sein, das aktuelle Datum/Uhrzeit (Zeitstempel) von dem DB-Server zu bekommen, mit dem ich eine Verbindung habe, unabhängig von der DB. (Im Idealfall möchte ich etwas, das für Oracle, DB2, SQL Server und Postgres funktioniert).Wie kann ich das aktuelle Datum/die aktuelle Uhrzeit von einem DB-Server über JDBC abrufen, unabhängig vom DB-Anbieter?

Auf der Suche im Internet habe ich Anspielungen auf die LOCALTIMESTAMP-Funktion und auf NOW() und CURRENT_TIMESTAMP gesehen, aber ich habe keine Klarheit darüber gesehen, ob diese wirklich interoperabel über RDBMS funktionieren.

Ich bin bereit, bei Bedarf für verschiedene DBs Alternativen zu erstellen, habe aber noch nicht einmal Klarheit darüber, wie dies am besten für die einzelnen DB-Anbieter funktioniert. Und sicherlich, wenn es für jeden anders gemacht werden muss, muss es eine Java-Bibliothek geben, die JDBC-Verbindungen umschließt und dies tut?

Abgesehen von herauszufinden, welche SQL-Funktion zu nutzen, frage ich mich auch, wenn es eine Standardmethode ist eine SQL-Abfrage zu tun, die nur ein Funktionsaufruf ist - einige DBs scheinen

SELECT fn(); 

zu unterstützen. ..aber Oracle scheint

...FROM DUAL; 

ich Zugabe zu verlangen, dass die SQL „Standard“ ein wenig abgenutzt, aber ich fragte mich, ob jemand, der mit arbeiten über Datenbanken mehr Erfahrung hat als ich und mit JDBC und den dazugehörigen Bibliotheken könnten in der Lage sein, mich in die richtige Richtung zu weisen.

danke!

Antwort

2

Funktionsaufrufe unterscheiden sich in verschiedenen Datenbanken. Während mit PostgreSQL ist einfach SELECT fun_name() in Oracle müssen Sie FROM dual hinzufügen. In anderen Datenbanken arbeite ich mit: Informix rufen Sie Prozedur/Funktion nicht mit SELECT aber mit execute procedure/function.

Ich denke, die einfachste Lösung besteht darin, während der Laufzeit zu prüfen, welche Datenbank gerade verwendet wird, und dann die für diese Datenbank erforderliche Abfrage zu erstellen.

+0

Danke. Am Ende scheint dies die einzige praktische Lösung, auch wenn enttäuschend. – Lee

1

current_timestamp ist die ansi-Funktion und für die Kompatibilität können Sie Dual verwenden: wählen current_timestamp von Dual

+0

danke, ich werde das ausprobieren! – Lee

+0

Ist da nicht das Problem, dass Dual eine Oracle-Sache ist? Sieht aus wie mysql tut es aber nicht PostgreSQL. – JOTN

+0

DB2: ... von SysDummy1 –

0

Oder eine Funktion/sp schreiben Sie es zu tun, und das auszuführen. Verkapseln Sie die Plattformunterschiede im SP.

+0

Leider habe ich keinen Zugriff auf die fraglichen Ziel-DB-Systeme nichts hinzuzufügen :( – Lee

1

Sie sollten auch beachten, dass verschiedene RDBMS das aktuelle Datum und die Uhrzeit in verschiedenen Formaten zurückgeben. Zumindest gibt es Unterschiede im Trennzeichen zwischen dem Datum und der Uhrzeit, einige enthalten standardmäßig Mikrosekunden und einige enthalten standardmäßig die Zeitzone.

+1

Solange Sie JDBC verwenden, sollten Sie getDate() für das ResultSet verwenden, und Sie erhalten ein java.sql.Date-Objekt, bei dem Sie sich keine Gedanken um Formatierungen machen müssen .. –

+0

DB2 for i verwendet ein Punkttrennzeichen: CURRENT_TIMESTAMP = 2010- 11-19-13.47.31.186787 –

Verwandte Themen