简体   繁体   English

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

[英]Using count sql query giving “Invalid column name” error in Java Program

How can i use this sql query in Java Program. 我如何在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' )";

I am using Preparatory statement to pass the externaleventid. 我正在使用Preparatory语句来传递externaleventid。 Other query works fine when I am using column name but when I don't use column name I am getting the error "Invalid column name" When I run this query in SQL developer it executes successfully. 当我使用列名时,其他查询工作正常,但是当我不使用列名时,出现错误“无效的列名”。在SQL Developer中运行此查询时,它会成功执行。

Added java code: 添加了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);
}

You should write 你应该写

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

instead of 代替

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

You are trying to get the result from a column named DISPLAYNAME which does not exist in your query. 您正在尝试从查询中不存在的名为DISPLAYNAME的列中获取结果。 One option is to ignore the name and retrieve by index: 一种选择是忽略名称并按索引检索:

rs.getString(1);

Another is to retrieve by name, but use the name of the alias that was on the query: 另一种方法是按名称检索,但要使用查询中使用的别名的名称:

rs.getString("result_str");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM