【问题标题】:Simple getColumnName(0) call throws Invalid column index: getValidColumnIndex简单的 getColumnName(0) 调用抛出无效的列索引:getValidColumnIndex
【发布时间】:2012-09-29 01:39:04
【问题描述】:

我正在尝试编写一个 JTable,它从 ResultSet 获取数据并使用它来创建一个动态大小的表,其中包含 ResultSet 中的适当列名和行数据值,但我无法让 JDBC 获取列名对我来说是动态的。

我知道我的选择语句很好!我可以使用我编写的 ResultPrinter 类轻松打印结果,但由于某种原因我似乎无法获取列名。

代码:http://pastebin.com/SSNdCkNu

输出:

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)

【问题讨论】:

    标签: java sql oracle jdbc


    【解决方案1】:

    列索引从 1 开始。因此,将指向列变量的变量增加 1。

    【讨论】:

      【解决方案2】:

      JDBC 列索引从 1 开始,而不是 0。尽可能使用列名检索数据,以避免对结果中列顺序的硬依赖。

      【讨论】:

      • 哇,这太荒谬了。或者也许我只是因为错误太简单而感到尴尬。无论哪种方式,我都认为以编程方式获取列数然后获取它们的名称是一个好方法?因为如果用户执行了一个不使用所有列的 select 语句,那么我就无法知道被选择的列的名称。
      • 您可以使用 ResultSetMetaData 了解给定结果集中存在的列及其数据类型。
      • 是的,这就是我正在做的 :) 为简单起见,我使用了硬编码 0,因为我试图找到错误的根源。
      猜你喜欢
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      相关资源
      最近更新 更多