Ergebnis 1 bis 9 von 9

Thema: JDBC getTableName cast von ResultSetMetaData zu PGResultSetMetaData

  1. #1
    .marc. ist offline Neuer Benutzer
    Registriert seit
    26.11.2008
    Beiträge
    4

    Standard JDBC getTableName cast von ResultSetMetaData zu PGResultSetMetaData

    Hallo,

    habe da ein kniffliges Problem mit JDBC:

    ResultSetMetaData rsmd = result.getMetaData();
    String tableName = rsmd.getTableName(1);

    liefert immer "" (leerer String) zurück, was am Treiber liegt. Der Workaround soll sein, dass mittels eines cast von ResultSetMetaData zu PGResultSetMetaData die Methode getBaseTableName auf zu rufen. MAche ich das via:

    tableName = ((org.postgresql.PGResultSetMetaData)rsmd).getBase TableName(1);

    erhalte ich

    java.lang.ClassCastException: org.postgresql.jdbc3.Jdbc3ResultSetMetaData cannot be cast to org.postgresql.PGResultSetMetaData

    zurück. Hat das schon jemand mit postgresql-8.2-509.jdbc3.jar hin bekommen?

    Danke & Grüsse,

    marc.

  2. #2
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    PGResultSetMetaData ist nur fuer ResultSetMetaData in Typ-2 und Typ-4 Treibern verfügbar

    (Das habe ich "herausgefunnden" indem ich mir mal die Klassenhierachie dieses Interfaces angeschaut habe - und da tauchen nur JDBC2 und JDBC4 Klassen auf ... ich habe hier aber auch einen neueren Treiber als du verwendest - den 8.3.)

    Du arbeitest offensichtlich mit einem Typ-3 Treiber ..

    ... frag mich nicht warum Typ 3 fehlt

  3. #3
    .marc. ist offline Neuer Benutzer
    Registriert seit
    26.11.2008
    Beiträge
    4

    Standard

    Besten Dank für die schnelle Antwort! Werde das gleich mal ausprobieren!

    Liebe Grüsse,

    marc.

  4. #4
    .marc. ist offline Neuer Benutzer
    Registriert seit
    26.11.2008
    Beiträge
    4

    Standard

    Sorry, aber das wars nicht.

    Mit einem kleinen Testprogramm und postgresql-8.2-509.jdbc3.jar funktioniert der cast PGResultSetMetaData pgrsmd = (PGResultSetMetaData)rs.getMetaData(); - nur in Tomcat via JNDI Resource/Conection Pool geht das nicht. Seit dem ich nicht mehr via JNDI verbinde, sondern selber eine Connection aufbaue, klappt es tadellos - auch mit postgresql-8.2-509.jdbc3.jar.

    Liebe Grüsse,

    marc

  5. #5
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    ich habe die treiber-version nur als referenz genannt

    der jdbc-typ hat damit nichts zu tun .. der sagt nur, auf welche weise der treiber mit dem backend kommuniziert ... typ-1 z.B. ueber die odbc bridge und typ-4 direkt .. dazwischen gibt es noch typ-2 und typ-3 ..

    diese duerften sowohl fuer den 8.2 als auch den 8.3 treiber implementiert sein (nicht jeder jdbc treiber muss alle typen supporten)

    was du nun feststellst ist, das unterschiedliche verhalten des treibers -je nach art des verbindungsaufbau - was darauf hindeutet, dass im Fall A eben ein anderer Typ angewendet wird als in Fall B.

    also da wo es funktioniert -> direkte verbindung .. da wo es nicht funktioniert -> indirekt (jndi -> middleware -> typ-3) weil das eben keine Typ-4 verbdingung ist ..

    zum schlau-machen:
    Java Database Connectivity – Wikipedia

    also die art des verbindungsaufbaus legt den verwendeten jdbc-typ fest - das macht der jdbc-treiber dann ... wie es scheint ist dieses PGResultSetMetadata Interface nicht fuer Typ-3 implementiert (siehst du an der Klassenhierachie) .. warum das so ist kann ich dir nicht sagen .. möglicherweise wurde es vergessen - oder es ist schlichtweg nicht möglich diese informationen ueber Typ-3 verbindungen zu liefern.
    Geändert von symbiont (27.11.2008 um 12:53 Uhr)

  6. #6
    .marc. ist offline Neuer Benutzer
    Registriert seit
    26.11.2008
    Beiträge
    4

    Standard

    Besten Dank für die Klärung - dann liegt es also am Protokoll...

  7. #7
    marc9022 ist offline Erfahrener Benutzer
    Registriert seit
    19.05.2008
    Beiträge
    162

    Standard

    Derzeit bekommst Du auch von den großen DB Herrstellern wie ORACLE
    nur noch Class 4 Teiber empfohlen, da die anderen Teilweise native
    JINI Verbindungen aufweisen können und da kann es ja immer mal
    zu unerwünschten Seiteneffekten kommen.

    Class 4 Treiber sind auf jeden Fall 100% pure Java und wickeln
    alles von innerhalb der JVM ab und sind zu 99% auch die Treiber
    die wenig Stress und maximale Performance liefern und auch mit
    den gängigen ConnectionPoolern wie z.B Apache DBCP oder
    dem SUN GlassFish AppServer keinen Ärger machen.
    Geändert von marc9022 (27.11.2008 um 21:25 Uhr)

  8. #8
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    aber .. in infrastrukturen die ueber den horizont der DMZ hinauslaufen u.U. einfach nicht eingsetzt werden können

    aber ..
    aber ..
    aber ..
    aber ..
    aber ..

  9. #9
    marc9022 ist offline Erfahrener Benutzer
    Registriert seit
    19.05.2008
    Beiträge
    162

    Standard

    Tendenziell halte ich Dich zwar für nen Spinner, aber diesmal könntest Du recht haben.

Ähnliche Themen

  1. Generated Key and JDBC
    Von halech im Forum SQL
    Antworten: 0
    Letzter Beitrag: 07.04.2011, 11:27
  2. Frage Transaction JDBC Postgresql 8.X
    Von seawolf im Forum Programmierung
    Antworten: 2
    Letzter Beitrag: 09.12.2010, 11:46
  3. Antworten: 8
    Letzter Beitrag: 05.11.2010, 13:36
  4. Cast von String nach Integer
    Von karl_ha im Forum SQL
    Antworten: 8
    Letzter Beitrag: 25.08.2010, 15:55
  5. Frage Default Cast abschalten
    Von traxanos im Forum Konfiguration
    Antworten: 4
    Letzter Beitrag: 08.02.2010, 11:23

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum