读取临时参数的 PreparedStatement

PreparedStatement for reading temporary parameter

我正在尝试读取从我的 MySql 查询创建的临时变量,如下所示:

String name = "";
                            selectQuery = "select (select "
                                    + "CONCAT(s.firstname,\" \",s.surname) "
                                    + "AS name) "
                                    + "from student s, marks m where m.grade = 'fail'";
                            try{
                                pstmt = con.prepareStatement(selectQuery);

                                rs = pstmt.executeQuery(selectQuery);
                                int count = 0;

                                while(rs.next()){
                                    name = rs.getString("name");
                                    System.out.println(++count+". "+name);
                                }
                                rs.close();
                                pstmt.close();
                            }catch(Exception e){
                                e.printStackTrace();
                            }

我收到 SQLException,因为找不到列 'name'。当我 运行 MySql 服务器中的查询时,它 运行 没问题。

为了应用别名,它必须放在嵌套查询的括号外面,而不是里面。但是,您可以完全放弃它,直接在 select 列表中使用 concat 调用。

另外两个旁注:

  1. 隐式连接(即在 from 列表中放置多个 table)已经被弃用了很长一段时间。使用 explicit 联接被认为是更好的做法。
  2. 无论您使用何种连接语法,您都缺少连接条件。
  3. 使用 concat_ws 而不是 concat 可能会省去您自己处理白色 space 的麻烦。

长话短说:

select CONCAT_WS(' ', s.firstname, s.surname) AS name
FROM   student s
JOIN   marks m ON s.id = m.student_id
WHERE  m.grade = 'fail'