web-dev-qa-db-de.com

Was bedeutet der folgende Oracle-Fehler: ungültiger Spaltenindex

Beim Testen des Codes wurde folgende Fehlermeldung angezeigt: 

SQLException: Ungültiger Spaltenindex

Was heißt das genau? 

Gibt es ein Online-Dokument, das alle Oracle-Fehlercodes und -Anweisungen erläutert?

31
jdbcnewbie.

Wenn dies eine von Java geworfene SQLException ist, liegt dies höchstwahrscheinlich daran, dass Sie versuchen, einen Wert aus einem ResultSet abzurufen oder festzulegen, der verwendete Index jedoch nicht innerhalb des Bereichs liegt. 

Beispielsweise versuchen Sie möglicherweise, die Spalte an Index 3 aus der Ergebnismenge abzurufen, es werden jedoch nur zwei Spalten aus der SQL-Abfrage zurückgegeben.

41
Datajam

Es klingt, als würden Sie versuchen, eine SELECT-Spalte zu __zugeben, die nicht existiert. 

Vielleicht versuchen Sie, eine Spalte zu ORDER BY, die nicht existiert?

Irgendwelche Tippfehler in Ihrer SQL-Anweisung?

10
p.campbell

Mit Spring's SimpleJdbcTemplate habe ich es verstanden, als ich folgendes versucht habe:

String sqlString = "select pwy_code from approver where university_id = '123'";
List<Map<String, Object>> rows = getSimpleJdbcTemplate().queryForList(sqlString, uniId);
  • Ich hatte ein Argument für queryForList, das keinem Fragezeichen in der SQL entsprach. Die erste Zeile hätte sein sollen:

    String sqlString = "select pwy_code from approver where university_id = ?";
    
7
Zoe

Ich habe auch diesen Typfehler erhalten, das Problem ist die falsche Verwendung von Parametern für Anweisungen wie: Nehmen wir an, Sie haben eine solche Abfrage

SELECT * FROM EMPLOYE E WHERE E.ID = ?

und für das preparStatement-Objekt (JDBC), wenn Sie die Parameter wie einstellen

preparedStatement.setXXX(1,value);
preparedStatement.setXXX(2,value)

dann ergibt sich SQLException: Invalid column index

Also entfernte ich die zweite Parametereinstellung für die vorbereitete Anweisung und löste dann das Problem

5
Naveen Kocherla

Ich hatte genau das gleiche Problem bei der Verwendung von Spring Security 3.1.0. und Oracle 11G. Ich habe die folgende Abfrage verwendet und den ungültigen Spaltenindexfehler erhalten:

<security:jdbc-user-service data-source-ref="dataSource"
                users-by-username-query="SELECT A.user_name AS username, A.password AS password FROM MB_REG_USER A where A.user_name=lower(?)"

Es stellte sich heraus, dass ich der Abfrage Folgendes hinzufügen musste: "1 wie aktiviert": 

<security:jdbc-user-service data-source-ref="dataSource" users-by-username query="SELECT A.user_name AS username, A.password AS password, 1 as enabled FROM MB_REG_USER A where A.user_name=lower(?)"

Danach hat alles funktioniert. Ich glaube, dass dies ein Fehler im Spring-JDBC-Kernpaket sein könnte ...

2
logixplayer

Ich hatte dieses Problem mit einer vorbereiteten Aussage. Ich habe nicht genug hinzugefügt "?" Für die "WERTE" war meine Sonnenfinsternis abgestürzt, nachdem ich den richtigen Betrag hinzugefügt hatte und diese Änderungen verloren hatte. Aber das schien mir nicht der Fehler zu sein, bis ich anfing, die SQL zu durchkämmen, wie p.campbell andeutete. 

1
eaglei22

die abschließende SQL-Anweisung lautet ungefähr so:

select col_1 from table_X where col_2 = 'abcd';

ich führe dies in meiner SQL IDE aus und alles ist in Ordnung.

Als Nächstes versuche ich, diese Anweisung mit Java zu erstellen:

String queryString= "select col_1 from table_X where col_2 = '?';";
PreparedStatement stmt = con.prepareStatement(queryString);
stmt.setString(1, "abcd"); //raises Java.sql.SQLException: Invalid column index

Obwohl die sql-Anweisung (die erste, die für die Datenbank ausgeführt wurde) Anführungszeichen um Zeichenfolgenwerte enthält und auch mit einem Semikolum endet, sollte die an das PreparedStatement übergebene Zeichenfolge keine Anführungszeichen um das Platzhalterzeichen? halbsäule.

ich habe gerade die Zeichen entfernt, die auf weißem Hintergrund erscheinen

"select col_1 from table_X where col_2 ='?';";

erhalten 

"select col_1 from table_X where col_2 = ?";

(Ich habe die Lösung hier gefunden: https://coderanch.com/t/424689/databases/Java-sql-SQLException-Invalid-column )

0
Newton fan 01

Ich hatte dieses Problem in einer älteren Anwendung, die dynamisch vorbereitete Anweisungen erstellt.

String firstName;
StringBuilder query =new StringBuilder("select id, name from employee where country_Code=1");
query.append("and  name like '");
query.append(firstName + "' ");
query.append("and ssn=?");
PreparedStatement preparedStatement =new prepareStatement(query.toString());

beim Versuch, einen Wert für SSN festzulegen, wurde ein ungültiger Spaltenindexfehler ausgegeben, und schließlich wurde herausgefunden, dass es der erste Vorname ist, der 'innerhalb' hat; das stört die Syntax. 

0
zelalem fikre