Wie man Datenbank-schema-Namen bei der Verwendung von oracle-jdbc-Verbindung?
Ich versuche, alle db-Tabellen mit DatabaseMetaData.getTables () - Methode. Aber diese Methode erfordert Datenbank-schema-name-Muster. Ist es möglich, dass der name des Schemas für das aktuelle db-Verbindung?
InformationsquelleAutor johnny-b-goode | 2012-11-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem standard-schema für die aktuelle Verbindung ist der name des Benutzers, den Sie zum einloggen verwenden. Also, wenn Ihr Benutzer ist
SCOTT
verwenden SieSCOTT
fürDatabaseMetaData.getTables()
.Erhalten Sie die Benutzernamen durch
DatabaseMetaData.getUserName()
.Aber denken Sie daran, dass der Vergleich der schema/username getan in der JDBC-Treiber ist Fall-sensititve und normalerweise die Benutzernamen in Großbuchstaben geschrieben werden.
Ich bin mir nicht 100% sicher, ob
DatabaseMetaData.getUserName()
zurückkehren wird der name in die korrekte groß-und Kleinschreibung in allen Situationen. Um sicher zu sein, möchten Sie vielleicht zu tun, die einen Großbuchstaben (), bevor Sie diesen Wert.Vielen Dank. Es hilft.
Seit dem schema/Benutzername ist case-sensitive, warum Oracle speichert die Benutzernamen in Großbuchstaben geschrieben werden??
da der SQL-standard erfordert Bezeichner gefaltet werden, in Großbuchstaben, das ist der Grund, warum nicht-Bezeichner werden in Großbuchstaben gespeichert in Oracle. Die groß-und Kleinschreibung in diesem Fall kommt von der Tatsache, dass der JDBC-Treiber im hintergrund macht etwas
where owner = ?
und das Vergleich ist case-Sensitiv (wie jeder andere string-Vergleich). Den Benutzernamen als Teil der id ist nicht case sensitive.select * from SCOTT.foobar
ist identicial zuselect * from scott.FOObar
Jetzt arbeite ich auf DDL-Schicht für verschiedene Datenbanken. Die Oracle-Verhalten machen mich nicht verallgemeinern, meine Umsetzung. Trotzdem zwingen Oracle zum speichern von username mit dem ursprünglichen Fall?
InformationsquelleAutor a_horse_with_no_name
Versuchen zu spielen, mit getCatalogs(). Dies ist ein kurzer Entwurf
Haben Sie eine Idee, warum die Methode aufgerufen wird, getCatalogs und nicht getSchemas ?
wenn du herausgefunden hast, warum in der Zwischenzeit 🙂 - es war die DB, wurde die Interpretation der Methode anders ? Ich meine, es funktioniert auf MySql, sondern auf Oracle oder andere DB zurückkehren können andere Typen von Objekten (stieß ich auf diesen Hinweis beim Lesen stackoverflow.com/questions/7942520/...)
InformationsquelleAutor Thai Tran
Seit Java 7
Connection
hat einegetSchema
Methode: https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html#getSchema--Die OP-Frage war speziell im Zusammenhang mit Oracle, aber da JDBC soll Abstrakt sein ... man würde denken "getSchema()" zurückkehren würde, das schema und die "getUserName()" et al zurückkehren würde, die erwarteten Daten, die im Zusammenhang mit einem gemeinsamen Modell der Benutzer -, Datenbank-Instanz-IDs und schemas, aber... ach das ist offensichtlich nicht konsequent für Oracle noch MySQL.
InformationsquelleAutor Tim Moore
Erhalten Sie Schemanamen
InformationsquelleAutor Jåcob
Die Antwort ist leider, dass es keine einheitlichen Lösungen. Wenn John hat Zugang zu Sally.Tisch ... die Abfrage funktioniert auch, aber getUserName() zurückkehren wird, John und nicht Sally schema. Für Oracle-Benutzer besitzt Ihr schema und während andere Zugang haben, die Benutzer-ID ist die Standard schema in diesem Zusammenhang.
Weiter, weder getSchemaName() noch getCatalog() wird wieder das schema-name.
@horse_with_no_name hat die nächste Antwort für Oracle da ein Benutzer-name (Standard) name des Schemas, sofern diese nicht im Objekt als Referenz gezeigt.
Für andere Datenbanken die gleichen Regeln gelten nicht konsequent.
InformationsquelleAutor Darrell Teague