PreparedStatement用于读取临时参数

时间:2018-02-13 06:26:30

标签: java mysql prepared-statement

我正在尝试读取从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服务器中运行查询时,它运行正常。

1 个答案:

答案 0 :(得分:0)

为了应用别名,它必须是之外嵌套查询的括号中,而不是在其中。但是,您可以完全删除它,只需直接在选择列表中使用concat调用。

还有两个旁注:

  1. 隐式连接(即在from列表中放置多个表)已被弃用了相当长一段时间。使用显式连接被视为更好的做法。
  2. 无论您使用何种加入语法,都会错过连接条件。
  3. 使用concat_ws代替concat可能会为您自己处理空白节省一些麻烦。
  4. 简而言之:

    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'