读取临时参数的 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
调用。
另外两个旁注:
- 隐式连接(即在
from
列表中放置多个 table)已经被弃用了很长一段时间。使用 explicit 联接被认为是更好的做法。
- 无论您使用何种连接语法,您都缺少连接条件。
- 使用
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'
我正在尝试读取从我的 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
调用。
另外两个旁注:
- 隐式连接(即在
from
列表中放置多个 table)已经被弃用了很长一段时间。使用 explicit 联接被认为是更好的做法。 - 无论您使用何种连接语法,您都缺少连接条件。
- 使用
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'