2012-10-08 95 views
5

Estoy intentando escribir una JTable que toma los datos de un ResultSet y los usa para crear una tabla de tamaño dinámico con nombres de columna y valores de datos de fila apropiados del ResultSet pero no puedo hacer que JDBC obtenga dinámicamente los nombres de las columnas.Simple getColumnName (0) call throws Índice de columna no válido: getValidColumnIndex

Sé que mi declaración es buena! Puedo imprimir los resultados fácilmente con mi clase ResultPrinter que escribí pero parece que no puedo obtener los nombres de las columnas por algún motivo.

El código: http://pastebin.com/SSNdCkNu

La salida:

Connected to DB! 
SNUM, SNAME, STATUS, CITY, SUPPLIERS_ID_SEQ // printed by static Suppliers class 
Columns: 5 // result set shows there are 5 valid columns as expected 
Exception in thread "main" java.sql.SQLException: Invalid column index: getValidColumnIndex 
at oracle.jdbc.driver.OracleResultSetMetaData.getValidColumnIndex(OracleResultSetMetaData.java:138) 
at oracle.jdbc.driver.OracleResultSetMetaData.getColumnName(OracleResultSetMetaData.java:306) 
at Main.main(Main.java:15) 

Respuesta

13
índices

columna JDBC comienzan a partir de 1 y no 0. En la medida de lo posible, es mejor para recuperar datos utilizando nombres de columna para evitar la dependencia duro en el orden de las columnas en los resultados.

+0

Vaya que es bastante ridículo. O tal vez estoy avergonzado porque el error fue muy simple. De cualquier manera, pensé que obtener el número de columnas programáticamente y obtener su nombre era un buen método. Porque si el usuario hace una instrucción de selección que no usa todas las columnas, entonces no hay forma de que yo sepa los nombres de las columnas que fueron seleccionadas o no. – anon58192932

+1

Puede utilizar ResultSetMetaData para conocer las columnas presentes en un conjunto de resultados determinado junto con su tipo de datos. – Vikdor

+0

Sí, eso es lo que estoy haciendo :) Utilicé el 0 codificado para simplificar porque estaba tratando de encontrar el origen del error. – anon58192932

2

índice de columna empieza en 1. Por lo tanto aumentar su variable de columna variable apuntando en 1.

Cuestiones relacionadas