Java-Bibliothek oracle.sdoapi



Ähnliche Dokumente
GML und Bibliothek oracle.sdoapi

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Oracle: Abstrakte Datentypen:

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Javakurs zu Informatik I. Henning Heitkötter

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Betriebshandbuch. MyInTouch Import Tool

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Programmieren in Java

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Java: Vererbung. Teil 3: super()

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

ICS-Addin. Benutzerhandbuch. Version: 1.0

PTV VISUM TIPPS & TRICKS:

Leitfaden: geoport in FlowFact

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Java Einführung Collections

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

5.2 Neue Projekte erstellen

Große Übung Praktische Informatik 1

Netzwerktechnik. Verkabelungen Netzwerk-Service Aktive Komponenten. Erste Schritte. PolyTrans2PYTHA PYTHA2PolyTrans. EVS electronic GmbH CAD-Vertrieb

Einführung in die Programmierung

Objektorientierte Programmierung

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Applet Firewall und Freigabe der Objekte

Internet online Update (Internet Explorer)

ACDSee Pro 2. ACDSee Pro 2 Tutorials: Übertragung von Fotos (+ Datenbank) auf einen anderen Computer. Über Metadaten und die Datenbank

Arbeiten mit UMLed und Delphi

desk.modul : WaWi- Export

Urlaubsregel in David

Software Engineering Klassendiagramme Assoziationen

Erstellen eines Screenshot

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

Professionelle Seminare im Bereich MS-Office

Nach der Anmeldung im Backend Bereich landen Sie im Kontrollzentrum, welches so aussieht:

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

Grundlagen von Python

EasyWk DAS Schwimmwettkampfprogramm

Internet Explorer Version 6

YouTube: Video-Untertitel übersetzen

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Beispiel: DB-Mock (1/7)

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Programmierkurs Java

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Typumwandlungen bei Referenztypen

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Bezahlen von Lohn und Gehalt per SEPA

SICHERN DER FAVORITEN

Prinzipien Objektorientierter Programmierung

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

JDBC. Allgemeines ODBC. java.sql. Beispiele

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Adminer: Installationsanleitung

Übungsblatt 3: Algorithmen in Java & Grammatiken

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Artikel Schnittstelle über CSV

Updatehinweise für die Version forma 5.5.5

SJ OFFICE - Update 3.0

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Version NotarNet Bürokommunikation. Bedienungsanleitung für den ZCS-Import-Assistenten für Outlook

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

Kurzeinweisung. WinFoto Plus

Die Online-Bestandserhebung im LSB Niedersachsen

Innere Klassen in Java

Fotos in Tobii Communicator verwenden

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Übung: Verwendung von Java-Threads

Festigkeit von FDM-3D-Druckteilen

Gesicherte Prozeduren

Anleitung zum Herunterladen von DIN-Vorschriften außerhalb des internen Hochschulnetzes

Empfehlungen zur Nutzung der CD zum Buch: Klee & Wiemann: Beweglichkeit und Dehnfähigkeit. Schorndorf: Hofmann,

SEP 114. Design by Contract

Dieses Dokument soll dem Administrator helfen, die ENiQ-Software als Client auf dem Zielrechner zu installieren und zu konfigurieren.

! " # $ " % & Nicki Wruck worldwidewruck

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

Argelander Institut für Astronomie. Persönliche Website

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Anforderungen an die HIS

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

Unsere Webapplikation erweitern

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

Historical Viewer. zu ETC5000 Benutzerhandbuch 312/15

Anleitung über den Umgang mit Schildern

Persönliches Adressbuch

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Fachhochschule Deggendorf Platzziffer:...

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Transkript:

Java-Bibliothek oracle.sdoapi Der Zugriff auf SQL-Objekte ist ein wenig umständlich und sollte unbedingt in entsprechenden Klassen gekapselt werden. Zur Arbeitserleichterung stellt aber Oracle seit dem Release 8.1.6 eine Klassenbibliothek namens oracle.sdoapi zur Verfügung, die den Zugriff auf SDO_GEOMETRY-Objekte unterstützt. Sie kann bis Oracle Spatial 10.1 genutzt werden und wurde inzwischen von der Klassenbibliothek oracle.spatial abgelöst. Datenmodell Die Geometrie-Klassen von sdoapi sind im Paket oracle.sdoapi.geom zusammengeführt. Abbildung 1.1 stellt die entsprechende Vererbungshierarchie dar 1. Sie ähnelt den Vererbungshierarchien des OGC-Simple-Feature-Modells und des Datenmodells von SQL/MM Spatial. Auf unterster Ebene finden wir die Objekte mit geradlinig verbundenen Eckpunkten. Die Klassen CurveString und CurvePolygon erlauben Kreisbögen als Verbindungen. Für deren Oberklassen Curve und Surface gibt es keine korrespondierenden SDO_GEOMETRY- Objekte. Für jede Klasse, die eine einzelne Geometrie repräsentiert, existiert eine entsprechende Collection-Klasse. Geometry ist die übergeordnete Geometrieklasse. Geometry GeometryCollection Curve Surface MultiSurface MultiCurve CurveString CurvePolygon MultiCurvePolyg MultiCurveStrin Point LineString Polygon MultiPolygon MultiLineString MultiPoint Abb. 1.1: Vererbungshierarchie im Paket oracle.sdoapi.geom. Abbildung 1.2 zeigt eine Auswahl weiterer Beziehungen. Objekte der Typen CurvePolygon bzw. Polygon bestehen jeweils aus einem äußeren und optional aus mehreren inneren Ringen. Für die Beschreibung von Geometrien gibt es zwei unterschiedliche Klassen: Während Objekte vom Typ CoordPoint zwei- oder dreidimensionale Punkte repräsentieren, stellen Segmente die Verbindung zwischen zwei Punkten dar. Als Spezialisierung von Segment existieren LinearSegment für geradlinige Verbindungen und CircularArc für Kreisbögen. Für jede Geometrie repräsentiert Envelope das minimal umgebende Rechteck. 1 Auch hier handelt es sich eigentlich um Schnittstellen, die durch interne Klassen aus dem Paket oracle.sdoapi.geom.impl implementiert werden.

2 Das räumliche Bezugssystem SpatialReference stammt aus dem Paket oracle.sdoapi. ref. Die Klassen des Pakets oracle.sdoapi.geom stellen jeweils Zugriffsmethoden auf die einzelnen Eigenschaften und Bestandteile der Objekte zur Verfügung. GeometryCollection CurvePolygon SpatialReference * oracle.sdoapi.ref 1..* exteriorring interiorring 0..* Geometry CurveString Polygon 2..* {geordnet interiorring * exteriorring 0..* Envelope Segment LineString lowerleft upperright * CoordPoint startpoint endpoint 2..* {geordnet CircularArc LinearSegment oracle.sdoapi.geom Abb. 1.2: Ausgewählte Beziehungen in oracle.sdoapi. Schnittstelle GeometryAdapter Für die Umwandlung zwischen der Datenbankrepräsentation als STRUCT und der jeweiligen Geometrieklasse aus oracle.sdoapi.geom ist ein Objekt zuständig, das die Schnittstelle GeometryAdapter aus dem Paket oracle.sdoapi.adapter erfüllt. Für die Umwandlung gibt es die Methoden importgeometry, um ein Geometry-Objekt zu erhalten, und exportgeometry, um ein Geometry-Objekt zurück zu konvertieren. Da die Schnittstelle GeometryAdaper nicht nur die Umwandlung zwischen Datenbankrepräsentationen und Objekten aus oracle.sdoapi.geom spezifiziert, sondern anstelle der Datenbankdarstellung auch andere Repräsentationen unterstützen soll, ist der jeweils andere Parameter nicht vom Typ STRUCT, sondern ein allgemeines Java-Object. Deswegen wird bei exportgeometry zusätzlich über einen Parameter vom Typ Class die gewünschte Zielklasse angegeben. Beide Methoden werfen Ausnahmen, wenn die Geometrie fehlerhaft ist oder ein nicht unterstützter Ausgabe- bzw. Eingabetyp übergeben wurde: Object exportgeometry (Class outputtype, Geometry geom) throws GeometryOutputTypeNotSupportedException, InvalidGeometryException Geometry importgeometry (Object inputdata) throws GeometryInputTypeNotSupportedException, InvalidGeometryException Da der GeometryAdapter nur eine Schnittstelle ist, stellt sich die Frage, wie man ein Objekt erhält, das diese Schnittstelle erfüllt. Dazu dient die Klasse OraSpatialManager, die einige Adapter bereithält und bei der sich weitere Adapter registrieren lassen können. Die Klassenmethode getgeometryadapter stellt einen spezifischen Adapter zur Verfügung:

3 static GeometryAdapter getgeometryadapter ( String formatname, // Umwandlungsformat "SDO" String formatversion, // "8.1.6" Class inputtype, // Eingabeklasse bei importgeometry Class outputtype, // Ausgabeklasse bei exportgeometry Class passthroughoutputtype, // null Connection conn) // Datenbankverbindung Der Parameter formatname enthält den Namen des Umwandlungsformats, der für die Datenbankrepräsentationen von Oracle Spatial SDO lautet. Der Parameter formatversion gibt die Version dieser Datenrepräsentation an. Da diese sich seit dem Oracle-Release 8.1.6 nicht verändert hat, ist hier zurzeit 8.1.6 anzugeben. Die Parameter inputtype und outputtype geben die Klasse an, aus der bzw. in die ein Geometry-Objekt umgewandelt werden soll. Dies ist oracle.sql.struct.class. Den fünften Parameter passthroughoutputtype können wir mit null ignorieren. Als letztes Argument ist die Datenbankverbindung zu übergeben. Sollte kein passender Adapter vorliegen, wird von der Methode null zurückgegeben. Lesen von Geodaten Mit diesen Informationen sind wir nun in der Lage, Geodaten aus der Datenbank in ein Java- Programm einzulesen. Dazu müssen die notwendigen Klassen von sdoapi importiert und mögliche Ausnahmen abgefangen werden. Nachdem der GeometryAdapter vorliegt, können die angefragten Geometrien umgewandelt und mit den entsprechenden Methoden auf deren Bestandteile zugegriffen werden. // Einlesen von Geoobjekten mit Hilfe des Paketes oracle.sdoapi import java.sql.*; // Import der JDBC-Klassen import oracle.sql.struct; // Import von STRUCT // Import der Klassen des SDO-API: import oracle.sdoapi.oraspatialmanager; import oracle.sdoapi.adapter.geometryadapter; import oracle.sdoapi.geom.*; public class SdoapiReadExample { public static void main (String[] args) { try { // Verbindung zur Datenbank aufbauen Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@"+dbhost+":"+dbport+":"+dbname; Connection db = DriverManager.getConnection(url, DBUSER, DBPASSWORD); // GeometryAdapter holen GeometryAdapter adapter = OraSpatialManager.getGeometryAdapter ("SDO", "8.1.6", STRUCT.class, null, null, db); if (adapter == null) { throw new ClassNotFoundException("Kein GeometryAdapter!"); // Anfrage ausführen Statement statement = db.createstatement(); String sql = "SELECT * FROM Gemeinden WHERE gkz = 3403000"; ResultSet result = statement.executequery(sql);

4 if (result.next()) { System.out.print(result.getString("name") + " - "); Point centrum = (Point)adapter.importGeometry(result.getObject("centrum")); System.out.println(centrum.getX() + " / " + centrum.gety()); Polygon pol = (Polygon)adapter.importGeometry(result.getObject("gebiet")); CurveString outerring = pol.getexteriorring(); System.out.println("#Eckpunkte: " + outerring.getnumpoints()); result.close(); statement.close(); // Verbindung schließen // try // Fehlerbehandlung catch (Exception ex) { System.err.println("SdoapiReadExample.main: " + ex); // main // class Für die Übersetzung und die Ausführung des Programms muss nun zusätzlich die Klassenbibliothek sdoapi (hier in der Datei sdoapi.zip) zugreifbar sein: rem Java-Datei übersetzen: javac -classpath.;./lib/ojdbc14.jar;./lib/sdoapi.zip SdoapiReadExample.java rem Programm ausführen: java -classpath.;./lib/ojdbc14.jar;./lib/sdoapi.zip SdoapiReadExample Das Programm erzeugt dann folgende Ausgaben: Oldenburg - 8.22261313155162 / 53.1468217508227 Anzahl der Eckpunkte: 272 Abspeichern von Geodaten Um Geodaten in der Datenbank abspeichern zu können, werden Objekte benötigt, die die Schnittstelle Geometry erfüllen. Diese können wir entweder dadurch erhalten, dass wir die Objekte zuvor aus der Datenbank einlesen, oder indem wir neue Objekte erzeugen. Für den zweiten Ansatz dient eine GeometryFactory (aus dem Paket oracle.sdoapi.geom), die man über die Klassenmethode getgeometryfactory der Klasse OraSpatialManager erhält: static GeometryFactory getgeometryfactory () static GeometryFactory getgeometryfactory (SpatialReference spatialref) Die erste Variante liefert eine GeometryFactory, die eingesetzt werden kann, falls kein räumliches Bezugssystem verwendet wird, während man bei der zweiten Form das gewünschte Bezugssystem angibt. Die GeometryFactory stellt eine Reihe von Methoden zum Erzeugen neuer Objekte der Geometry-Klassenhierarchie zur Verfügung. Ein räumliches Bezugssystem erhält man über den SRManager, dessen Methode retrieve für eine angegebene Bezugssystemnummer ein entsprechendes SpatialReference-Objekt

5 bestimmt (oder null zurückgibt, falls es kein Bezugssystem mit der angegebenen Nummer in der Datenbank gibt). Der SRManager stammt wie SpatialReference aus dem Paket oracle.sdoapi.ref und wird durch eine Methode der Klasse OraSpatialManager bereitgestellt: static SRManager getspatialreferencemanager (Connection conn) Damit kann eine neue Gemeinde wie folgt in die Datenbank einfügt werden: // Erzeugen und Speichern von Geoobjekten mit Hilfe des Paketes oracle.sdoapi import java.sql.*; // Import der JDBC-Klassen import oracle.sql.struct; // Import von STRUCT // Import der Klassen des SDO-API: import oracle.sdoapi.oraspatialmanager; import oracle.sdoapi.adapter.geometryadapter; import oracle.sdoapi.geom.*; import oracle.sdoapi.sref.spatialreference; import oracle.sdoapi.sref.srmanager; public class SdoapiStoreExample { public static void main (String[] args) { try { // Verbindung zur Datenbank aufbauen Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@"+dbhost+":"+dbport+":"+dbname; Connection db = DriverManager.getConnection(url, DBUSER, DBPASSWORD); // GeometryAdapter holen GeometryAdapter adapter = OraSpatialManager.getGeometryAdapter ("SDO", "8.1.6", STRUCT.class, STRUCT.class, null, db); if (adapter == null) { throw new ClassNotFoundException("Kein GeometryAdapter!"); // Bezugssystem holen SRManager srm = OraSpatialManager.getSpatialReferenceManager(db); SpatialReference cs = srm.retrieve(8307); // alte SRID if (cs == null) { throw new ClassNotFoundException("Keine SpatialReference!"); // GeometryFactory holen GeometryFactory gf = OraSpatialManager.getGeometryFactory(cs); // Insert vorbereiten String sql = "INSERT INTO Gemeinden (gkz,name,einw,centrum,gebiet) " + "VALUES (1056025,'Helgoland',1499,?,?)"; PreparedStatement insert = db.preparestatement(sql); // Punkt setzen Point centrum = gf.createpoint(7.936,54.204); Object obj = adapter.exportgeometry(struct.class,centrum); insert.setobject (1,obj); // Gebiet setzen double coords[] = {7.923,54.210, 7.944,54.194, 7.952,54.197, 7.945,54.209, 7.938,54.211, 7.923,54.210;

6 LineString ring = gf.createlinestring(coords); Polygon gebiet = gf.createpolygon(ring,null); // null, da keine Löcher obj = adapter.exportgeometry(struct.class,gebiet); insert.setobject (2,obj); // Einfügen insert.executeupdate(); insert.close(); // Verbindung schließen // try // Fehlerbehandlung catch (Exception ex) { System.err.println("SdoapiStoreExample.main: " + ex); // main // class Nach Übersetzung und Ausführung ist die Gemeinde Helgoland, die zum Bundesland Schleswig-Holstein gehört, neu in der Datenbank gespeichert: SELECT gkz, name, einw FROM Gemeinden WHERE name = 'Helgoland'; GKZ NAME EINW ---------- ------------------------------ ---------- 1056025 Helgoland 1499 SELECT centrum FROM Gemeinden WHERE name = 'Helgoland'; CENTRUM ------------------------------------------------------------------------ SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(7,936, 54,204, NULL), NULL,NULL) SELECT gebiet FROM Gemeinden WHERE name = 'Helgoland'; GEBIET ------------------------------------------------------------------------ SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1), SDO_ORDINATE_ARRAY(7,923, 54,21, 7,944, 54,194, 7,952, 54,197, 7,945, 54,209, 7,938, 54,211, 7,923, 54,21))