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

标签 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=?;";

我收到此错误:错误:未找到“curso”列。。当我使用点 (.) 符号访问 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 中工作。

谢谢!

最佳答案

我建议将查询写成:

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

关于java - 从其他表获取数据的错误sql语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45134723/

相关文章:

php - 如何在数组中存储 POST 元素

mysql - 如何更改除 id 选择的行之外的所有其他行

php - 从 mysql 数据的下拉列表中预选值

java - 安卓。 onEditorAction 从未调用过

java - 将列表中的列表提取为单个列表

java - 无法在 Spring Hibernate 基于注释的配置中获取 JDBC 连接

MySQL 错误代码 1452 外键约束

mysql - 我从 mysql join 查询得到错误的结果

java - 在递归函数中初始化变量

java - 更改 JavaFX StackedBarChart 中的数据不断插入起始位置