GML und Bibliothek oracle.sdoapi

Ähnliche Dokumente
Java-Bibliothek oracle.sdoapi

Oracle: Abstrakte Datentypen:

Oracle & Java HOW TO

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Verlagerung von Java-Anwendungen in die Datenbank (Teil I)

JDBC. Java DataBase Connectivity

SQLJ. Standardisierte Java-DB. DB-Schnittstelle. Spezifikationen. Oracle, IBM, Informix, Sybase,, Tandem, Sun, Microsoft stehen dahinter

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

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

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7

Javaaktuell. Java ist vielseitig. ijug. Praxis. Wissen. Networking. Das Magazin für Entwickler Aus der Community für die Community

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Prozedurale Datenbank- Anwendungsprogrammierung

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

Einführung in die Informatik II

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

Klassenvariablen, Klassenmethoden

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Webbasierte Informationssysteme

Ich liebe Java && Ich liebe C# Rolf Borst

cs241: Datenbanken mit Übungen HS 2011

Informatik II Übung 06. Benjamin Hepp 5 April 2017

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

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

Entwicklungsumgebung für die Laborübung

Modularisierung in Java: Pakete Software Entwicklung 1

Datenbank und Informationssysteme

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

Erstellen und Verwalten von Tabellen

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Datenbankzugriff mit JDBC

Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Kapitel 4 Dynamisches SQL

Objektorientierte Programmierung Studiengang Medieninformatik

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen

Pakete Software Entwicklung 1

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

JDBC. Allgemeines ODBC. java.sql. Beispiele

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Artikel JavaMagzin 10/2010

Strukturierte Objekttypen

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

1 Klassen anlegen und Objekte erzeugen

1 Klassen anlegen und Objekte erzeugen

Kapitel DB:VI (Fortsetzung)

Kontrollstrukturen MySQL Funktionen. MySQL 4, 5. Kapitel 20a: PHP Teil 2. Marcel Noe

Webbasierte Informationssysteme

Datenbanken & Informationssysteme Übungen Teil 1

PROGRAMMIERPROJEKT 2016 VERWENDETE TECHNOLOGIEN

Musterlösung Stand: 5. Februar 2009

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Datenbank Anbindung. Arthur Zaczek. Nov 2014

Vorbereitungen Download. AVO-Übung 6. Beispiel. Slice. Varianten u.a. für Linux, Windows, OS X ICE-Dokumentation ICE-Binaries (inkl.

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

4.2 Workshop EJB. Entwicklung von EJB-Anwendungen

4. Vererbung Die Klasse Object. Die Klasse Object

Beispiel: DB-Mock (1/7)

Vorlesung Informatik II

Java Database Connectivity-API (JDBC)

Programmieren I. Fehlerbehandlung Exceptions. Heusch 2. Bd, 3 Ratz 10. Institut für Angewandte Informatik

Hauptschritte einer JDBC-App

Welche Informatik-Kenntnisse bringen Sie mit?

Programmieren I + II Regeln der Code-Formatierung

Eigene Funktionen innerhalb von pgsql

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

11 Anwendungsprogrammierung

Programmieren II. Beispiele für RDBMS. Relationale Datenbanken. Datenbanken SQL. Dr. Klaus Höppner JDBC. Hochschule Darmstadt SS 2008

Java Database Connectivity-API (JDBC)

DB-Programmierung. Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1. Ziele. DB2 Zugriff mit Java selbst programmieren

Objektorientierte Programmierung und Klassen

Repetitorium Informatik (Java)

Klausur Datenbanken II

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Programmentwicklung ohne BlueJ

Programmieren in Java -Eingangstest-

Java und Datenbanksysteme Datenbankanbindung mit JDBC

Willkommen. Datenbanken und Anbindung

Kapitel Was ist ein Header? Was ist ein Body? Header: public Account(String newowner, int newpin)

Einstieg in die Informatik mit Java

NoSQL mit Postgres 15. Juni 2015

Objekt-relationales Datenbanksystem Oracle

Arbeit mit zusammengesetzten Datentypen

Einstieg in die Informatik mit Java

6. Globalübung (zu Übungsblatt 8)

Einstieg in die Informatik mit Java

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

10. Programmieren in SQL

Grundlagen der Informatik

System.out.println("TEXT");

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

Transkript:

GML und Bibliothek oracle.sdoapi Nachfolgend werden die Java-Klassen aus dem GML-Kapitel unter Verwendung der alten Klassenbibliothek oracle.sdoapi dargestellt. Erzeugung von GML 3.1 aus SDO_GEOMETRY-Objekten // Klasse zur Erzeugung von GML aus SDO_GEOMETRY-Objekten 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 GenerateGML { static private Connection db; static private GeometryAdapter adapter; // Die Datenbankverbindung. // Der Adapter. // Initialisierung der Klasse. static { // Verbindung zur Datenbank aufbauen db = DriverManager.getConnection("jdbc:default:connection:"); // GeometryAdapter holen adapter = OraSpatialManager.getGeometryAdapter ("SDO","8.1.6",STRUCT.class,null,null,db); System.err.println("Fehler: "+ex); // Umwandlung einer SDO_GEOMETRY in GML 3.1 public static String togml (STRUCT spatialobj) { Geometry geom = adapter.importgeometry(spatialobj); if (geom instanceof Point) { Point point = (Point)geom; return "<Point><pos>" + point.getx() + " " + point.gety() + "</pos></point>"; else if (geom instanceof LineString) { LineString line = (LineString)geom; String res = "<LineString><posList>"; for (int i=0; i<line.getnumpoints(); i++) { CoordPoint p = line.getpointat(i); res += p.getx() + " " + p.gety() + " "; res += "</poslist></linestring>"; return res;

2 else if (geom instanceof CurveString) { CurveString line = (CurveString)geom; String res = "<CompositeCurve>"; Segment[] seg = line.getsegmentarray(); // Bestandteile des zusammengesetzten Linienzugs bearbeiten for (int i=0; i<seg.length; i++) { res += "<curvemember>"; // Fall 1: lineares Segment if (seg[i] instanceof LinearSegment) { LinearSegment l = (LinearSegment)seg[i]; res += "<LineString><posList>" + l.getstartpoint().getx()+" " + l.getstartpoint().gety()+" " + l.getendpoint().getx() + " " + l.getendpoint().gety() + "</poslist></linestring>"; // Fall 2: Kurvensegment else { CircularArc arc = (CircularArc)seg[i]; res += "<Curve><segments><ArcString><posList>" + a.getstartpoint().getx()+" " + a.getstartpoint().gety()+" " + a.getmidpoint().getx() + " " + a.getmidpoint().gety() + " " + a.getendpoint().getx() + " " + a.getendpoint().gety() + "</poslist></arcstring></segments></curve>"; res += "</curvemember>"; res += "</CompositeCurve>"; return res; return "<Error>" + geom.getclass().getname() + " nicht unterstützt."; // try return "<Error>" + ex + ""; Die Klasse besitzt mit der Datenbankverbindung db und dem Adapter adapter zwei Attribute, die beim Laden der Klasse initialisiert werden. Da die Klasse in Oracle gespeichert werden soll, kann der JDBC Server-Side Internal Driver als JDBC-Treiber verwendet werden. Der Adapter erlaubt die Umwandlung in Geometrien des Pakets oracle.sdoapi. geom. Dies erfolgt in der Klassenmethode togml, die als Parameter ein SDO_GEOMETRY-Objekt vom Typ oracle.sql.struct erhält. Nach der Umwandlung in ein Geometry-Objekt wird je nach Geometrietyp die GML-Zeichenkette gebildet. Die Beispielmethode zeigt dies für Punkte und Linienzüge auf; für die anderen Geometrietypen kann die Erzeugung in analoger Weise programmiert werden. Damit die Klasse in der Datenbank ausgeführt werden kann, müssen die Zip-Datei mit der sdoapi-bibliothek und die Klasse GenerateGML über das Werkzeug loadjava von der Kommandozeile aus geladen werden:

3 loadjava -user <Benutzer>/<Passwort>@<Dienstname> -resolve sdoapi.zip loadjava -user <Benutzer>/<Passwort>@<Dienstname> -andresolve GenerateGML.java Außerdem wird eine PL/SQL-Funktion benötigt, die auf die Java-Methode togml verweist: CREATE OR REPLACE FUNCTION gml (geom MDSYS.SDO_GEOMETRY) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'GenerateGML.toGML (oracle.sql.struct) return java.lang.string'; / Diese Funktion gml kann nun in SQL-Anweisungen genutzt werden, wobei nur für die von der Java-Methode togml berücksichtigten Klassen GML erzeugt wird. SELECT name, gml(geo) FROM GeoDbLand; NAME GML(GEO) ----------- --------------------------------------------------------------- Flaggenmast <Point><pos>10.0 11.0</pos></Point> Steg <LineString><posList> 4.0 4.0 5.0 7.0 8.0 8.0 </poslist></linestring> Baumreihe <Error> oracle.sdoapi.geom.impl.multipointimpl nicht unterstützt. Wall <CompositeCurve><curveMember><Curve><segments><ArcString> <poslist>1.0 15.0 2.414 15.586 3.0 17.0</posList> </ArcString></segments></Curve></curveMember> <curvemember><curve><segments><arcstring> <poslist>3.0 17.0 3.586 18.414 5.0 19.0</posList> </ArcString></segments></Curve></curveMember> <curvemember><linestring> <poslist>5.0 19.0 7.0 19.0</posList> </LineString></curveMember></CompositeCurve> Haus <Error> oracle.sdoapi.geom.impl.polygonimpl nicht unterstützt. Land <Error> oracle.sdoapi.geom.impl.multipolygonimpl nicht unterstützt. Überführung von GML-Punkten in die Tabelle POIPositionen Die Überführung eines GML-Koordinatenelements ist am einfachsten in einer Java-Methode zu programmieren. Im nachfolgenden Beispiel erhält die Klassenmethode insertpos den Text, der in einem pos-element enthalten ist, um daraus einen SDO_GEOMETRY-Punkt zu erzeugen. Dieser Punkt wird dann zusammen mit dem Gemeindekennzeichen und dem POI- Namen in die Tabelle POIPositionen eingefügt. // Klasse für Überführung von GML-Punkten in die Tabelle POIPositionen import java.sql.*; // Import der JDBC-Klassen import oracle.sql.struct; // Import von STRUCT import oracle.sdoapi.oraspatialmanager; // Import von SDO-API import oracle.sdoapi.adapter.geometryadapter; import oracle.sdoapi.geom.*;

4 import oracle.sdoapi.sref.spatialreference; import oracle.sdoapi.sref.srmanager; public class ProcessGML { static private Connection db; // Die Datenbankverbindung. static private GeometryAdapter adapter; // Der Adapter. static private GeometryFactory gf; // Der Geometrie-Erzeuger. static private PreparedStatement insert; // Einfüge-Anweisung. // Initialisierung der Klasse. static { // Verbindung zur Datenbank aufbauen db = DriverManager.getConnection("jdbc:default:connection:"); // GeometryAdapter, Bezugssystem und GeometryFactory holen adapter = OraSpatialManager.getGeometryAdapter ("SDO","8.1.6",STRUCT.class,STRUCT.class,null,db); SRManager srm = OraSpatialManager.getSpatialReferenceManager(db); SpatialReference cs = srm.retrieve(4326); // vor 10.2: 8307 gf = OraSpatialManager.getGeometryFactory(cs); // Insert vorbereiten String sql = "INSERT INTO POIPositionen (gkz,name,pos) VALUES (?,?,?)"; insert = db.preparestatement(sql); System.err.println("Fehler: " + ex); // Einfügen der Koordinaten in die Tabelle "POIPositionen". public static void insertpos (int gkz, String name, String coords) { System.out.print("insertPos " + gkz + " " + name + " " +name.length()); insert.setint(1,gkz); insert.setstring(2,name); coords = coords.trim(); double x = Double.parseDouble( coords.substring(0,coords.indexof(' '))); double y = Double.parseDouble( coords.substring(coords.lastindexof(' ')+1)); Point poi = gf.createpoint(x,y); Object obj = adapter.exportgeometry(struct.class,poi); insert.setobject (3,obj); insert.executeupdate(); // try System.out.print("Fehler: " + ex); Bei der Initialisierung der Klasse wird zusätzlich gegenüber dem vorherigen Beispiel eine GeometryFactory angelegt und eine INSERT-Anweisung als PreparedStatement vorbereitet,

die es erlaubt, einen neuen Datensatz in die Tabelle POIPositionen einzufügen. In der Methode insertpos wird aus der Zeichenkette coords der x- und der y-wert extrahiert, ein neuer Punkt der Klasse oracle.sdoapi.geom.point erzeugt, dieser in den Typ oracle.sql. STRUCT umgewandelt und dann ein entsprechender neuer Datensatz in die Tabelle POIPositionen eingefügt. 5