为什么它说“java.sql.SQLException:无效的列名”

时间:2011-09-15 09:04:51

标签: java sql jdbc oracle10g

我正在尝试从DB获得结果

        String strCommand = "select TO_CHAR (realdate, 'YYYYMMDD'), PURCHASE_PRICE, SELLING_PRICE from CURRENCY_VI where RATE_NAME='EUR'";

        cs.setQueryTimeout(m_nTimeout);

        ResultSet rs = cs.executeQuery(strCommand);

        while (rs.next()){
            System.out.println("!!!\n\nDATE = " + rs.getString("realdate") + " PURCHASE_PRICE = " + rs.getString("PURCHASE_PRICE") + " SELLING_PRICE = " + rs.getString("SELLING_PRICE"));
        }

它说rs.getString("realdate") - “ java.sql.SQLException:列名无效”,为什么?

没有rs.getString("realdate")一切正常。

实际上,表格有这一栏

  CREATE TABLE "GPB"."CURRENCY_VI" 
   (           "REALDATE" DATE, 
                "PURCHASE_PRICE" FLOAT(126), 
                "SELLING_PRICE " FLOAT(126), 
                "RATE_NAME" VARCHAR2(20 BYTE)
   )

谢谢!

4 个答案:

答案 0 :(得分:11)

我认为你没有选择realdate。您正在选择TO_CHAR (realdate, 'YYYYMMDD'),该列将获得该名称。你可以这样做:

TO_CHAR (realdate, 'YYYYMMDD') as myrealdate

并选择它。 (使用`rs.getString("myrealdate"),而不是realdate

答案 1 :(得分:4)

realdate子句中没有列SELECT。您选择TO_CHAR (realdate, 'YYYYMMDD')相同的东西。您可能想尝试使用getString("TO_CHAR (realdate, 'YYYYMMDD')"),如果这不起作用,请使用AS为该列命名:

select TO_CHAR (realdate, 'YYYYMMDD') AS realdate, PURCHASE_PRICE, SELLING_PRICE from CURRENCY_VI where RATE_NAME='EUR'

或者,您可以使用基于列索引的选择:rs.getString(1)(请注意,JDBC中的索引始终是从1开始的。)

答案 2 :(得分:2)

您在TO_CHAR (realdate, 'YYYYMMDD')字段上选择了REALDATE功能,而不是字段本身。为其添加别名并使用该别名来检索结果。

SELECT TO_CHAR (realdate, 'YYYYMMDD') as realdate_str, ....

rs.getString("realdate_str");

答案 3 :(得分:0)

“realdate”不在您的选择查询中 像这样进行查询

String strCommand = "select REALDATE, PURCHASE_PRICE, SELLING_PRICE from CURRENCY_VI where RATE_NAME='EUR'";