java - 用于读取临时参数的PreparedStatement

标签 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,因为未找到列“名称”。当我在 MySql 服务器中运行查询时,它运行良好。

最佳答案

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

还有两个旁注:

  1. 隐式联接(即在 from 列表中放置多个表)已被弃用相当长一段时间。使用显式联接被认为是更好的做法。
  2. 无论您使用哪种连接语法,您都会缺少连接条件。
  3. 使用concat_ws而不是 concat 可能会为您节省一些自行处理空白的麻烦。

长话短说:

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'

关于java - 用于读取临时参数的PreparedStatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48760684/

相关文章:

java - 如何从 javaFx 中同一数据库中的两个 mysql 表填充 TableView ?

php - 为什么sql查询不执行?

mysql 使用 count() 比较列

java - 以下简单查询未完成。准备好的声明

java - PreparedStatement 有什么问题?

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

java - Netbeans 7.4 JAX-RS Servlet 类

java - 是否有任何工具可以重构Java代码库的编码样式?

java - 将 HashMap 添加到 HashMap 作为值

php - basic - PHP/mySQL 中 foreach 循环中每个项目的多个类别