使用count sql查询在Java程序中给出“无效的列名”错误

时间:2014-04-24 23:08:18

标签: java eclipse jdbc

我如何在Java程序中使用此SQL查询。

String SelectSQL = "SELECT (CASE WHEN cnt >= 1
                             THEN 'True'
                             ELSE 'False'
                             END) result_str
                 FROM ( SELECT COUNT(*) cnt FROM event WHERE externaleventid ='1256294' )";

我正在使用预备声明来传递externaleventid。当我使用列名时,其他查询工作正常,但当我不使用列名时,我收到错误“无效列名”当我在SQL开发人员中运行此查询时,它成功执行。

添加了java代码:

String query = " SELECT (CASE WHEN COUNT(*) >= 1 THEN 'True' ELSE 'False' END) AS result_str FROM event WHERE externaleventid = ?";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1,"1256294");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) { 
    String externaleventid = rs.getString("DISPLAYNAME");
    System.out.println("externaleventid : " + externaleventid);
}

2 个答案:

答案 0 :(得分:0)

你应该写

         "SELECT (CASE WHEN cnt >= 1
                         THEN 'True'
                         ELSE 'False'
                         END) AS result_str
             FROM ( SELECT COUNT(*) AS cnt FROM event WHERE externaleventid ='1256294' )";

而不是

        "SELECT (CASE WHEN cnt >= 1
                         THEN 'True'
                         ELSE 'False'
                         END) result_str
             FROM ( SELECT COUNT(*) cnt FROM event WHERE externaleventid ='1256294' )"; 

答案 1 :(得分:0)

您正在尝试从名为DISPLAYNAME的列中获取结果,该列在查询中不存在。一种选择是忽略名称并按索引检索:

rs.getString(1);

另一种方法是按名称检索,但使用查询中的别名名称:

rs.getString("result_str");