2017-07-17 1 views
1

他のテーブルからデータを取得できません。 私はJava preparedStatementsとmySQLを使用しています。他のテーブルからデータを取得するSQL構文が間違っています

これは私の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-ワークベンチで働いています。

ありがとうございました!

+0

。 –

+0

'curso as c'のようなエイリアスを使って、' c.nombre'のようなところで使ってみましょう。 – msagala25

+0

@GordonLinoffはい、置き換えられます。 –

答えて

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

しかし、私は括弧を削除、別名の使い方が表示されない、またはセミコロンを削除すると、表示されるエラーにつながる可能性があります。 1つの可能性は、無効な文字(SELECTまたはWHERE)が表示されます。

EDIT:

私はあなたの問題は、このコードだと思う:

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

同じエラーが発生します。 'Error:列 'curso'が見つかりません。 ' –

+0

@DiegoRios。 。 。私は、実行されているこのクエリから離れて他のコードがあると思う。 –

+0

私はJavaコードを見ることができるように質問を更新しました。 –

1

犯人はここにある、あなたはエラーError :Column 'curso' not found.を取得する理由

 String curso = rs.getString("curso"); // You should retrieve here a column and not a table. 
     String aula = rs.getString("aula"); 

厥。

あなたは次のようにクエリにあなたが書いたコラムを置く必要があります?私は `` SQLパラメータとして交換されていると仮定すると、そのクエリは、そのエラーを発生させる可能性がどのように表示されていない

String curso = rs.getString("curso.nombre"); 
String aula = rs.getString("aula.numero"); 
+0

@Gordon Linoffがあなたに4分前にそれに答えました。とにかくありがとう!私はあなたの答えをupvoted。 –

+0

私たちが手伝ってくれれば大丈夫です。 – msagala25

+0

ありがとうございました! –

関連する問題