Hast du in der 8.2 die PostGIS Erweiterung installiert?
Hallo!
Ich habe hier folgende Situation, die ich bisher nicht lösen konnte: es geht um die Abfrage von Daten aus einer Postgre DB mit PostGIS-Erweiterung.
Wenn nun in einer Abfrage die Spalte "the_geom" mit ausgelsen wird, bekomme ich in meiner Java-Anwendung folgende Exception:
java.sql.SQLException: Unknown type: 0101000020E610000024D6E25300EE5DC06A87BF266B684240
at org.postgis.PGgeometry.setValue(PGgeometry.java:38 )
at org.postgresql.jdbc2.AbstractJdbc2Connection.getOb ject(AbstractJdbc2Connection.java:391)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getObj ect(AbstractJdbc2ResultSet.java:2329)
at de.p3.rei.test.JavaGIS.main(JavaGIS.java:23)
Ausgelöst wird die Exception, wenn auf das ResultSet über getObject() zugegriffen wird.
Das ganze passiert auf einem Server, der bei mir im Geschäft extra für solche Aufgaben zur Verfügung steht. Bei mir lokal auf meinem Rechner tritt dieser Fehler nicht auf, auch wenn ich Daten aus der DB vom Server hole.
Hat jemand eine Idee oder etwas ähnlich schon einmal gehabt?
Auf beiden Rechnern läuft Java SDK 6.0. Einziger Unterschied ist, dass auf dem Server Postgre 8.2 und auf meinem Rechner 8.3 installiert ist...
Geändert von MisterM (08.06.2009 um 14:51 Uhr) Grund: Nachtrag, wann Exception ausgelöst wird
Alles wird gut!
Hast du in der 8.2 die PostGIS Erweiterung installiert?
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Ja hab ich. Das Framework ist schon seit einiger Zeit in Verwendung und wird nebenbei weiter entwickelt.
Dieser Fehler tritt bisher zum ersten Mal auf, vor einiger Zeit liefen Tests über zwei Wochen ohne Probleme und seitdem wurde ansich nichts an Postgre oder den zugehörigen Bibliotheken geändert.
Alles wird gut!
die zahl bei "unknown type" ist eine serialID des typs der da wohl deserialisiert werden soll - ich kenne die Postgis API nicht - daher kann ich dir jetzt nicht sagen, org.postgis.PGgeometry.setValue( ) da genau vorhat.
ueber die SerialID wird üblicherweise sichergestellt, dass bei der deserialisation die gleiche version einer klasse instantiiert wird, wie das objekt vor der serialisation hatte.
d.h. z.B. dass zwar eine klasse des selben typs im class-path vorliegt, aber evtl. eine andere serialID hat - was darauf hindeutet, dass es ne andere version ist - also "nicht passt".
http://www.koders.com/java/fidB52DDC...?s=Geometry#L9
hier sehen wir, warum die exception ausgeloest wirdCode:public void setValue(String value) throws SQLException { value = value.trim(); if( value.startsWith("SRID")) { //break up geometry into srid and wkt PGtokenizer t = new PGtokenizer(value,';'); value = t.getToken(1); } if( value.startsWith("MULTIPOLYGON")) { geom = new MultiPolygon(value); } else if( value.startsWith("MULTILINESTRING")) { geom = new MultiLineString(value); } else if( value.startsWith("MULTIPOINT")) { geom = new MultiPoint(value); } else if( value.startsWith("POLYGON")) { geom = new Polygon(value); } else if( value.startsWith("LINESTRING")) { geom = new LineString(value); } else if( value.startsWith("POINT")) { geom = new Point(value); } else { throw new SQLException("Unknown type: " + value); } }
meine vermutung war also falsch - dem uebergebenen string muss also vorweg noch etwas angefuegt werden, damit die funktion weiss, um was fuer daten es sich handelt - auf deutsch: der parameter value muss noch aufgepeppt werden
Geändert von symbiont (15.06.2009 um 14:23 Uhr)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen