2012-10-08 13 views
5

Bir ResultSet'ten veri alan bir JTable yazmaya çalışıyorum ve ResultSet'ten uygun sütun adlarına ve satır veri değerlerine sahip dinamik boyutlu bir tablo oluşturmak için bunu kullanıyorum ama ben dinamik olarak benim için sütun isimleri almak için JDBC alamıyorum.Basit getColumnName (0) çağrısı geçersiz sütun dizini: getValidColumnIndex

Seçtiğim bildirimin iyi olduğunu biliyorum! Sonuçları yazdığım ResultPrinter sınıfımla kolayca yazdırabilirim ancak bir sebepten dolayı sütun isimlerini göremiyorum.

kodu: http://pastebin.com/SSNdCkNu

çıkışı:

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) 

cevap

13

JDBC sütun indeksleri 1'den başlayıp değil 0. Mümkün olduğunca, zor bağımlılığı önlemek için sütun adlarını kullanarak veri almak daha iyidir sonuçlarda sütunların sırasına göre.

+0

Vay bu oldukça saçma. Ya da sadece hapsedilmiştim çünkü hata çok basitti. Her iki şekilde de programatik olarak sütun sayısını almayı ve sonra isimlerini almanın iyi bir yöntem olduğunu düşündüm. Çünkü kullanıcı tüm sütunları kullanmayan bir seçim ifadesi yaparsa, seçili olan veya olmayan sütunların isimlerini bilmemin bir yolu yoktur. – anon58192932

+1

Belirli bir sonuç kümesinde bulunan sütunlarını veri türleriyle birlikte tanımak için ResultSetMetaData'yı kullanabilirsiniz. – Vikdor

+0

Evet, benim yaptığım şey budur :) Kolaylık sağlamak için sabit kodlanmış 0'ı kullanıyorum çünkü hatanın kaynağını bulmaya çalışıyordum. – anon58192932

2

Sütun dizini 1 ile başlar. Bu nedenle, değişken işaretleme sütun değişkeninizi 1 artırın.

İlgili konular