【问题标题】:java.sql.SQLException: Invalid column indexjava.sql.SQLException:列索引无效
【发布时间】:2013-02-26 20:50:46
【问题描述】:

我有一个 SQL 查询,我想用它来将组件计数到表中。

private DCDataObj dc;

    public class DCDataObj
    {

        private int datacenter;             //  Datacenters
        ..............

        public DCDataObj(int datacenter............)
        {
            this.datacenter = datacenter;
            ...............
        }

        public int getDatacenter()
        {
            return datacenter;
        }

        public void setDatacenter(int datacenter)
        {
            this.datacenter = datacenter;
        }

        ............
    }

ps = conn.prepareStatement("SELECT COUNT(1) AS CNT FROM COMPONENTSTATS CS, COMPONENTTYPE CT "
        + " WHERE CS.COMPONENTTYPEID = CT.COMPONENTTYPEID AND CT.COMPONENTTYPEID IN ( "
        + " ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " //  10
        + " ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " //  20
        + " ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " //  30
        + " ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) " //  40
        + " GROUP BY CT.NAME ORDER BY CT.NAME");

ps.setInt(1, 1000);
...............

ResultSet result = ps.executeQuery();
            while (result.next())
            {

                dc = new DCDataObj(
                        result.getInt(1),
                        ...............

这里是完整的源代码:http://pastebin.com/YMvqBPpV

我收到此错误消息:java.sql.SQLException: Invalid column index

这是设计问题还是问题出在 SQL 查询中?

【问题讨论】:

  • 您是否在ps.setIntresult.getInt 收到错误消息?
  • 完整的堆栈跟踪应该会显示问题所在的行。

标签: java sql oracle oracle11g


【解决方案1】:

我看到了你的完整源代码,你有一堆result.getInt(INDEX)。因为你只做SELECT COUNT(1),所以只有一列,所以INDEX除1以外的任何值,getInt()都会失败。

将您的查询更改为SELECT <LIST> ...,其中LIST 是您要从中检索值的列名的逗号分隔列表。

【讨论】:

  • 没有“正确”查询,您希望查询返回什么?
  • 我希望查询返回每个组件的编号。
  • 那你为什么要在查询后创建new DCDataObj(...) 对象。您应该将int 创建为int count = result.getInt(1);
  • 是的,但我想用每个组件的数量填充 Java 对象。通过一个 SQL 查询,我想获取每个组件的数量
  • 该对象的类没有计数字段。您将不得不以不同的方式存储计数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
相关资源
最近更新 更多