2017-01-11 3 views
2

Ich schreibe eine Java Anwendung zum automatischen Erstellen und Ausführen von SQL-Abfragen. Für viele Tabellen mein Code funktioniert gut, aber an einem bestimmten Tisch wird es durch das Werfen die folgende Ausnahme fest:PostgreSQL "Spalte existiert nicht", aber es tut tatsächlich

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "continent" does not exist 
    Hint: Perhaps you meant to reference the column "countries.Continent". 
    Position: 8 

Die Abfrage, die ausgeführt wurde ist die folgende:

SELECT Continent 
FROM network.countries 
WHERE Continent IS NOT NULL 
AND Continent <> '' 
LIMIT 5 

Diese im Wesentlichen kehrt 5 nicht -leere Werte aus der Spalte

Ich verstehe nicht, warum ich den Fehler "Spalte nicht existiert" bekomme, wenn es eindeutig in pgAdmin 4 tut. Ich kann sehen, dass es ein Schema mit dem Namen Network gibt, das die Tabelle countries enthält und diese Tabelle genau wie erwartet eine Spalte mit dem Namen Continent hat.

Da alle Spalten-, Schema- und Tabellennamen von der Anwendung selbst abgerufen werden, glaube ich nicht, dass es eine Rechtschreibung oder einen semantischen Fehler gegeben hat. Warum verursacht unabhängig davon Probleme? Das Ausführen der Abfrage in pgAdmin4 noch die Verwendung des vorgeschlagenen countries.Continent funktioniert.

Meine PostgreSQL-Version ist der neueste Stand jetzt:

$ psql --version 
psql (PostgreSQL) 9.6.1 

Wie kann ich die Abfrage erfolgreich ausgeführt?

+0

Bitte [Bearbeiten] Ihre Frage ein und fügen Sie die 'table'-Anweisung für die Tabelle' Länder 'erstellen. –

+0

PostgreSQL unterscheidet zwischen Groß- und Kleinschreibung –

+0

@wingedpanther: Es ist ** nur ** Groß-und Kleinschreibung, wenn Sie diese gefürchteten zitierten Bezeichner verwenden. –

Antwort

6

versuchen, es in doppelte Anführungszeichen zu nehmen - wie "Continent" in der Abfrage:

SELECT "Continent" 
FROM network.countries 
... 
+0

Ah ja :) Der Spaltenname beginnt mit einem Großbuchstaben, während andere Spalten nicht. Ihre Antwort ist korrekt, es funktioniert mit Anführungszeichen – BullyWiiPlaza

+0

@BullyWiiPlaza: Sie sollten überdenken, wie Sie Ihre Tabellen erstellen (Sie haben anscheinend den Namen beim Erstellen der Tabelle zitiert). Im Allgemeinen ist es besser, keine doppelten Anführungszeichen zu verwenden - Sie werden auf lange Sicht viel weniger Probleme haben. –

+0

@a_horse_with_no_name: Nun, ich habe diese Datenbank nicht eingerichtet, aber ich muss damit arbeiten ... – BullyWiiPlaza

Verwandte Themen