Zugriff auf eine Postgresql-DB mit Java

Programmierung mit PostgreSQL (C#, PHP, Perl, Java, ...)
IngeMaus
Neuer Benutzer
Beiträge: 7
Registriert: Mo 29. Mär 2010, 17:59
Kontaktdaten:

Zugriff auf eine Postgresql-DB mit Java

Beitragvon IngeMaus » Fr 25. Jun 2010, 18:20

ich arbeite mit Eclipse (Java 1.6) mit Postgresql.8.4.4 Linux (Betriebssystem Opensuse 11.2). Installiert habe ich Postgresql (Install and Configure PostgreSQL in openSUSE 11.0 | SUSE & openSUSE) und anschließend user und Datenbank mit pgAdmin3 angelegt. Jetzt will ich mit Java auf diese DB zugreifen (Insert, Update, Delete). Habe dafür postgresql.8.4.701.jdbc4.jar in Eclipse als Library eingebunden. Beim Starten der Oberfläche gibt er mir aus: Verbindung aufgebaut und nach dem SQL-Befehl org.postgresql.util.PSQLException: FEHLER: Relation Tabelle existiert nicht.
Auf einigen Webseiten wird angegeben, den Postmaster zu starten. Aber auch damit geht es nicht. Der SQL-Befehl wird in pgAdmin ohne Probleme ausgeführt. Ich habe die jar nach /usr/share/java kopiert. Aber auch das brachte nichts. Wer kann mir helfen?

castorp
Erfahrener Benutzer
Beiträge: 907
Registriert: Sa 27. Jun 2009, 22:24
Kontaktdaten:

Beitragvon castorp » Fr 25. Jun 2010, 18:51

IngeMaus hat geschrieben:Verbindung aufgebaut und nach dem SQL-Befehl org.postgresql.util.PSQLException: FEHLER: Relation Tabelle existiert nicht. Wer kann mir helfen?
Die Tabelle(n) die in Deinem SQL verwendet werden, gibt es nicht auf dem Server.

Hast Du die vorher auch angelegt?

Wie sieht das CREATE TABLE der Tabelle aus?
Wie sieht Dein SELECT (oder UPDATE, ...) aus?
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

IngeMaus
Neuer Benutzer
Beiträge: 7
Registriert: Mo 29. Mär 2010, 17:59
Kontaktdaten:

Beitragvon IngeMaus » Fr 25. Jun 2010, 20:18

Ich habe die Tabelle mit Create table tabellenname (Attribute); Commit; einschließlich der Constraints über sql-Script von pgAdmin3 angelegt. Besitzer der Tabellen ist der von Java angesprochene User. Die SQL-Befehle in Java-Script funktionieren wenn ich sie bei pgAdmin direkt starte, es wird eingefügt, geändert oder entsprechende Daten ausgelesen.

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitragvon ads » Fr 25. Jun 2010, 20:23

Kannst du die exakten Befehle hier kopieren? Setze diese bitte in [ code ] und [ / code ] Tags (jeweils ohne Leerzeichen).
Bitte auch auf Groß-/Kleinschreibung achten.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support

IngeMaus
Neuer Benutzer
Beiträge: 7
Registriert: Mo 29. Mär 2010, 17:59
Kontaktdaten:

Beitragvon IngeMaus » Mo 28. Jun 2010, 15:32

Angelegt habe ich die Tabellen mit: CREATE TABLE auto (autokennzeichen character varying (20) NOT NULL, marke character varying (20), CONSTRAINT auto_pkey PRIMARY KEY (autokennzeichen)WITH(OIDS=FALSE); ALTER TABLE auto OWNER TO "Ingrid"; und
CREATE TABLE tanken (ID integer NOT NULL, autokennzeichen character varying (20),
CONSTRAINT tanken_pkey PRIMARY KEY (id), foreign key (autokennzeichen) references auto)WITH (OIDS=FALSE); ALTER TABLE tanken OWNER TO "Ingrid";
und in Java habe ich versucht die Datensätze mit "SELECT * FROM auto;" oder "INSERT INTO auto VALUES ('" + kennzeichen + "', '" + marke + "'); \n Commit;" abzufragen bzw. neue Datensätze anzulegen. Wenn ich diese Datensätze direkt bei pgAdmin3 starte, wird eingefügt bzw. abgefragt. Daher vermute ich, dass ich von Java keine Verbindung zu den Tabellen aufgebaut habe.

ads
Erfahrener Benutzer
Beiträge: 4148
Registriert: Mi 8. Feb 2006, 10:58
Wohnort: MD
Kontaktdaten:

Beitragvon ads » Mo 28. Jun 2010, 15:43

Es gibt bestimmt Methoden für Transaktionen. Du solltest vermeiden das COMMIT direkt an das INSERT anzuhängen. Andernfalls bekommst du den Rückgabewert vom COMMIT und nicht den vom INSERT. Und der ist eigentlich immer "OK".

Ach ja, wie war das mit [ code ] Tags? Das erhöht ungemein die Lesbarkeit deines Postings.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild



Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler



PostgreSQL Service & Support

castorp
Erfahrener Benutzer
Beiträge: 907
Registriert: Sa 27. Jun 2009, 22:24
Kontaktdaten:

Beitragvon castorp » Mo 28. Jun 2010, 15:51

IngeMaus hat geschrieben:und in Java habe ich versucht die Datensätze mit "SELECT * FROM auto;" oder "INSERT INTO auto VALUES ('" + kennzeichen + "', '" + marke + "'); \n Commit;" abzufragen bzw. neue Datensätze anzulegen
Hast Du wirklich das commit und das SELECT in einem Java String?
Das geht nicht.

Statement.execute() (und seine Derivate) könnten nur genau ein Statement ausführen.
Normalerweise kriegst Du eine Exception wenn Du in dem SQL String ein Semikolon drin hast...

Du musst also sowas wie

Code: Alles auswählen

try
{
   stmt.executeUpdate("INSERT INTO auto VALUES ('" + kennzeichen + "', '" + marke + "');
   con.commit();
}
catch (SQLException sql)
{
   sql.printStackTrace();
   con.rollback();
}

machen
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

IngeMaus
Neuer Benutzer
Beiträge: 7
Registriert: Mo 29. Mär 2010, 17:59
Kontaktdaten:

Beitragvon IngeMaus » Mi 30. Jun 2010, 13:15

Danke für die Hilfe. Ich habe die Befehle im Java-Programm entsprechend geändert (kein Commit und Semikolon). Trotzdem bekomme ich weiterhin die Fehlermeldung: SQLException: org.postgresql.util.PSQLException: FEHLER: Relation »auto« existiert nicht.
Ich habe bei den Befehlen auto in public.auto geändert, bekomme aber auch eine Fehlermeldung (FEHLER: Relation »public.auto« existiert nicht).
Ich habe die Verbindung zu Postgres nach der Internetseite (http://www.pg-forum.de/h-ufig-gestellte-fragen-faq/1801-startup-f-r-postgresql-jdbc-eclipse.html) programmiert.
Dort bekomme ich keine Fehlermeldungen und die Verbindung wird als org.postgresql.jdbc4.Jdbc4Connection@587c94 ausgegeben.
Ich weiß nicht mehr weiter.

akretschmer
Erfahrener Benutzer
Beiträge: 7046
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitragvon akretschmer » Mi 30. Jun 2010, 13:27

IngeMaus hat geschrieben:Danke für die Hilfe. Ich habe die Befehle im Java-Programm entsprechend geändert (kein Commit und Semikolon). Trotzdem bekomme ich weiterhin die Fehlermeldung: SQLException: org.postgresql.util.PSQLException: FEHLER: Relation »auto« existiert nicht.

Ich weiß nicht mehr weiter.


Ich kann hier nur vermuten. Und ich vermute, Du hast da vielleicht Probleme mit groß/KLEIN - ScHrEiBuNg. Was ist denn, wenn Du mit psql Dich auf der DB einloggst und schaust, ob es die Tabelle da gibt?

Andreas
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

castorp
Erfahrener Benutzer
Beiträge: 907
Registriert: Sa 27. Jun 2009, 22:24
Kontaktdaten:

Beitragvon castorp » Mi 30. Jun 2010, 15:44

akretschmer hat geschrieben:Ich kann hier nur vermuten. Und ich vermute, Du hast da vielleicht Probleme mit groß/KLEIN - ScHrEiBuNg.
Das dachte ich auch zuerst. Aber wenn das gepostete CREATE TABLE stimmt, kann's eigentlich nicht sein (weil keine Quotes verwendet)

Ich tippe eher auf eine falsche Verbindung (z.B. falsche DB ausgewählt in der JDBC URL)
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'


Zurück zu „Programmierung“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste