我遇到了从其他桌子获取数据的麻烦。 我正在使用Java preparedStatements和mySQL。
这是我的SQL查询:
String sql = "SELECT alumno.nombre, alumno.apellido, curso.nombre, aula.numero FROM "+
"((alumno INNER JOIN curso ON alumno.id_curso = curso.id_curso) "+
"INNER JOIN aula ON alumno.id_aula = aula.id_aula) "+
"WHERE (alumno.nombre=? "+
"OR alumno.apellido=?) "+
"OR curso.nombre=? "+
"OR aula.numero=?;";
我收到此错误:Error :Column 'curso' not found.
。当我使用点(。)表示法访问curso
表时,为什么要尝试获取列。我是Java-mySQL的新手。
这是我的java代码:
try{
conn = Conexion.connect();
stm = conn.prepareStatement(sql);
stm.setString(1, "Diego");
stm.setString(2, "Rios");
stm.setString(3, "Informatica");
stm.setString(4, "202");
rs = stm.executeQuery();
System.out.println(stm);
while(rs.next()){
String nombre = rs.getString("nombre");
String apellido = rs.getString("apellido");
String curso = rs.getString("curso");
String aula = rs.getString("aula");
System.out.println(nombre);
System.out.println(apellido);
System.out.println(curso);
System.out.println(aula);
a.setNombre(nombre);
a.setApellido(apellido);
a.setCurso(curso);
a.setAula(aula);
lista.add(a);
}
} catch (Exception e){
System.out.println("Error :"+e.getMessage());
} finally {
if(stm != null){
try {
stm.close();
} catch (SQLException ex) {
Logger.getLogger(AlumnoDAO.class.getName()).log(Level.SEVERE, null, ex);
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException ex) {
Logger.getLogger(AlumnoDAO.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
PS:它在mySQL-workbench中工作。
谢谢!
答案 0 :(得分:2)
我建议将查询编写为:
SELECT a.nombre, a.apellido, c.nombre, au.numero
FROM alumno a INNER JOIN
curso c
ON a.id_curso = c.id_curso INNER JOIN
aula au
ON a.id_aula = au.id_aula
WHERE a.nombre = ? OR
a.apellido = ? OR
c.nombre = ? OR
au.numero = ?
但是,我没有看到如何使用别名,删除括号或删除分号可能会导致您看到的错误。一种可能性是SELECT
或WHERE
子句中的无效字符,其中一个字段不可见。
编辑:
我认为你的问题是这段代码:
String curso = rs.getString("curso");
没有名为curso
的输出列。这可以在select
:
SELECT a.nombre, a.apellido, c.nombre as curso_nombre, au.numero
然后使用:
String curso = rs.getString("curso_nombre");
答案 1 :(得分:1)
罪魁祸首在这里,
String curso = rs.getString("curso"); // You should retrieve here a column and not a table.
String aula = rs.getString("aula");
这就是为什么你会收到错误Error :Column 'curso' not found.
。
您应该在查询中添加您所写的列,如:
String curso = rs.getString("curso.nombre");
String aula = rs.getString("aula.numero");