2011-05-11 22 views
26

Tengo el siguiente error al probar algo de código:¿Qué hace la siguiente media de error de Oracle: índice de la columna no válido

SQLException: Invalid column index

¿Qué significa exactamente eso?

¿Hay algún documento en línea que explique todos los códigos y declaraciones de error de Oracle?

+5

Se puede editar la pregunta para incluir la instrucción SQL exacto en que este error arrojó sobre? ¿Quizás incluya los detalles exactos del error, junto con el número ORA? –

+0

Mensajes de error de Oracle: http://download.oracle.com/docs/cd/E11882_01/server.112/e17766/toc.htm –

Respuesta

35

Si es una excepción SQLE arrojada por Java, es más probable porque está tratando de obtener o establecer un valor de un ResultSet, pero el índice que está utilizando no está dentro del rango.

Por ejemplo, puede que esté tratando de obtener la columna en el índice 3 del conjunto de resultados, pero solo tiene dos columnas que se devuelven de la consulta SQL.

8

Parece que está intentando SELECT una columna que no existe.

Tal vez estás tratando de ORDER BY una columna que no existe?

¿Algún error tipográfico en su declaración de SQL?

5

Usando SimpleJdbcTemplate de primavera, lo tengo cuando traté de hacer esto:

String sqlString = "select pwy_code from approver where university_id = '123'"; 
List<Map<String, Object>> rows = getSimpleJdbcTemplate().queryForList(sqlString, uniId); 
  • tuve una discusión a queryForList que no correspondía a un signo de interrogación en el SQL. La primera línea debería haber sido:

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

que tenían el mismo problema cuando se utiliza la primavera de Seguridad 3.1.0. y Oracle 11G. Yo estaba usando la siguiente consulta y obtener el error no válido índice de la columna:

<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(?)" 

Resulta que necesitaba para agregar: "1 como habilitado" a la consulta:

<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(?)" 

Todo funcionó después de eso . Creo que esto podría ser un error en el paquete principal de Spring JDBC ...

1

Tuve este problema utilizando una declaración preparada. No agregué suficiente "?" para los "VALORES" Mi eclipse se había bloqueado después de que agregué la cantidad adecuada y perdí esos cambios. Pero eso no se me ocurrió ser el error hasta que comencé a analizar el SQL como lo sugirió p.campbell.

2

También me dio este error de tipo, el problema es el uso incorrecto de parámetros a declaración como, digamos que usted tiene una consulta como esta

SELECT * FROM EMPLOYE E WHERE E.ID = ? 

y para el objeto PreparedStatement (JDBC) si establece los parámetros como

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

entonces resulta en SQLException: Invalid column index

Así, quité ese segundo ajuste de los parámetros de declaración preparada entonces el problema resuelto

0

Tuve este problema en una aplicación heredada que creaba una declaración preparada dinámicamente.

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()); 

cuando se trata de establecer el valor de SSN, se da un error de índice de columna no válido, y finalmente descubrimos que es causada por tener primerNombre 'dentro; que alteran la sintaxis

-1

que tienen tabla de Oracle con más abajo estructura

SQL> desc demo 
Name          Null? Type 
----------------------------------------- -------- ------------ 

ID             NUMBER(38) 
NAME            VARCHAR2(20) 
SALARY            NUMBER(6) 
**************************** 

yo estaba tratando de insertar valores con los de abajo código y ha obtenido un error

**************************** 
PreparedStatement stmt=con.prepareStatement("update demo set salary=? where id=?"); 
stmt.setInt(3,288800); 
stmt.setInt(1,8); 


************************ 

excepción de SQL: índice de la columna no válida

código correcto es

************************ 
PreparedStatement stmt=con.prepareStatement("update demo set salary=? where id=?"); 
stmt.setInt(1,288800); 
stmt.setInt(2,8); 
******************* 
stmt.setInt(1,288800);//1 represents salary i.e first '?' 
stmt.setInt(2,8);//2 represents id i.e second '?' 
Aquí

1 representa en realidad la columna no está en consulta prepareStatement no hay columna en la tabla de base de datos

espero que esta ayuda ..

[1]: https://i.stack.imgur.com/vXvMA.png 
0

la instrucción SQL final es algo así como:

select col_1 from table_X where col_2 = 'abcd'; 

corro esto dentro de mi SQL IDE y todo está bien.

A continuación, trato de construir esta declaración con java:

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 

Aunque la instrucción SQL (el primero, se presentó contra la base de datos) contiene comillas alrededor de los valores de cadena, y también acaba con el semicolumn, la cadena que paso a PreparedStatement no debe contener comillas alrededor del carácter comodín?, ni debe terminar con semicolumna.

i acaba de quitar los caracteres que aparecen en el fondo blanco

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

obtener

"select col_1 from table_X where col_2 = ?"; 

(he encontrado la solución aquí: https://coderanch.com/t/424689/databases/java-sql-SQLException-Invalid-column)

Cuestiones relacionadas