JDBC Insert auf Spalte mit Anführungszeichen

Andyx1975

Mitglied
Hallo,

ich habe ein kleines Problem mit postgresql. Ich habe einen Table bei dem eine Spalte in Anführungszeichen gestzt ist. Ich kann über JDBC keinen Insert befehl abfeuern. Ich bekomme den folgenden Fehler:


Fehlermeldung:
Java:
:::: Sended SQL Statement: INSERT INTO ident (vorname, "name", sortname, bem) VALUES ('dfg', 'dgdfg', 'dgdfg, dfg', 'dg') ::::
org.postgresql.util.PSQLException: Die Anweisung wurde geschlossen.
SQL-State: 55000
ErrorCode: 0


Die Tabelle sieht wie folgt aus:
SQL:
CREATE TABLE ident
(
  identnr serial NOT NULL,
  vorname character(30),
  "name" character(100),
  sortname character(20),
  akfz character(3),
  bland character(2),
  geschl character(1),
  anti character(25),
  antizudtxt character(30),
  bem character(255),
  t_rolle character(1),
  t_gebdat date,
  t_mtknr integer,
  titel_nachgestellt character(25)
)

Feuere Ich den Insert "INSERT INTO ident (vorname, "name", sortname, bem) VALUES ('dfg', 'dgdfg', 'dgdfg, dfg', 'dg')" auf der Datenbank ab funktioniert es. Das Problem liegt an den Anführungszeichen der Spalte "name". Wie muss ich den SQL abfeurn, damit er angenommen wird?

Danke
Andy
 
Zuletzt bearbeitet von einem Moderator:
Mal ne GANZ BLÖDE Frage : warum hast du die Spalte auch so benannt ?
Das ergibt keinen Sinn *außerdem wäre das glaube ich sogar ein ungültiges SQL-Statement*.

Auch finde ich die Fehlermeldung sehr sonderlich ...
Du bekommst eine Exception mit dem Error-Code 0 ? ... Da stimmt was nicht.

Auch wäre der relevante Code ganz hilfreich.

btw : für SQL-Statements kannst du auch das [code=sql][/code] Tag-Pair verwenden.
 
hey danke...also ich habe die spalte nicht so genannt. Ich greife hier auf eine bestehende Datenbank zurück, die nicht von mir ist. Postgresql setzt die Anführungszeichen automatisch weil "name" ein schlüsselbegriff ist.

Der code sieht wie folgt aus:
Java:
 try
        {
            sqlQuery =
                "INSERT INTO ident (vorname, \"name\", sortname, bem)" + " VALUES ('" + vorname + "', '" + name + "', '" + sortname + "', '" + login + "')";

            System.out.println( " :::: Sended SQL Statement: " + sqlQuery + " ::::" );
            temp = DBConnection.stat.executeUpdate( sqlQuery );
            saveSuccess = true;
        }

        catch ( SQLException e )
        {
            DBConnection.SQLExceptions( e );
            JOptionPane.showConfirmDialog( null, "Ein unerwarteter Datenbankfehler ist aufgetreten:\n" + e,
                                           "Datenbankfehler", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE );
        }
 
Achso ... naja .. ich kenne PostGreSQL nur vom Namen ... mit gearbeitet habe ich noch nicht.

Aber um im SQL92-Standard zu bleiben sollte dein Query ungefähr so aussehen :
SQL:
INSERT INTO `ident` ('vorname', 'name', 'sortname', 'bem') VALUES ('vorname', 'name', 'sortname', 'bem');
Zumindest würde so ein INSERT-Query bei MySQL aussehen.
 
Danke für dein Feedback....leider funktioniert das bei Postgres und JDBC nicht. Ich hatte den Fall schoneinmal, finde aber nichts mehr dazu und weiss nicht mehr wie ich es gelöst hatte. Die Anführungszeichen haben hier eine Sonderstellung mit der der JDBC nicht einfach zurecht kommt.
 
Hmm .. wie sieht es denn mit anderen Postgres-Editoren aus ? *Kenne mich da ja nicht so aus.*
Hast du schon mal versucht mit diesen ein Query zu erzeugen und dies dann zu über nehmen ?
*Für MySQL gibts ja z.B. phpMyAdmin der einem die ausgeführten Queries auf wunsch auch anzeigt *zumindest bisher ... in der aktuellen Version wurde das entfernt*.
Oder das MySQL-Eigene Tool Workbench ...
Gibt es sowas auch für Postgres ? *Sollte es eigentlich.*
Dann bau dir da doch mal ein funtkionierendes Beispiel-Query zusammen und probiere dies mit JDBC aus ... wenn das nicht funktioniert versuche mal den JDBC-Driver zu wechseln *falls möglich*.
 
Ja es gibt PGAdmin...über den kann ich den SQL auch abfeuern. Er legts an...also liegt das Problem beim JDBC Treiber. Aber ich habe gerade eben mein Problem gefunden. Ich hatte in einer anderen Methode die Datenbankverbindung geschlossen und dann in einer neuen die Verbindung nicht neu aufgebaut :)
 
Sowas passiert =D
Das wurde so aber leider auch mir aus der Exception nicht ersichtlich. Und leider auch nicht aus dem Stück Code was du gepostet hast.
Ich hätte aber dazu eine Frage : warum schließt du die Verbindung und baust eine neue auf wärend deine App immer noch läuft ? Hat es einen besonderen Hintergrund *flush , User-Change , was auch immer* oder warum ? Ich persönlich halte eine Verbindung zur DB so lange offen wie eine Instanz meiner App läuft ... und lege sie auch so als super-global an das ich von überall in meiner App darauf *natürlich synchronisiert* zugreifen kann.
 
Zurück