错误的sql语法从其他表中获取数据

时间:2017-07-17 01:09:56

标签: java mysql

我遇到了从其他桌子获取数据的麻烦。 我正在使用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中工作。

谢谢!

2 个答案:

答案 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 = ?

但是,我没有看到如何使用别名,删除括号或删除分号可能会导致您看到的错误。一种可能性是SELECTWHERE子句中的无效字符,其中一个字段不可见。

编辑:

我认为你的问题是这段代码:

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");