2011-03-25 5 views
0

DB에서 데이터를 가져 오려고합니다.중첩 된 SELECT 쿼리 Java + MySQL

나는 쿼리에 사용해야합니다. (루프에서) 첫 번째 쿼리에서

나는 일 codew의 코드를 얻고 내가 이름을 얻을 수있는 두 번째 쿼리에서 사용.

여기에 코드가 오류없이 작동합니다.

제 쿼리 행을 인출하지만, 두번째 실행되지 않는다.

int i=0; 
c= new Connect().getCon(); 
try{ 

    java.sql.Statement st = c.createStatement(); 
    String sql= " SELECT distinct(s.codew), title, nberstat, desc_w, dated,datef" + 
       " FROM work w, employe e, stat s " + 
       " WHERE w.codew=s.codew " + 
       " and s.idemploye= e.idemploye " + 
       " and stat_w=0 " + 
       " and w.idcreator= 1"; 
    System.out.println(sql);  
    ResultSet res = (ResultSet) st.executeQuery(sql); 
    String allW =""; 
    while (res.next()) 
    {    
    String codew = res.getString("codew"); 
    String title = res.getString("title"); 
    String desc_w = res.getString("desc_w"); 
    String dated = res.getString("dated"); 
    String date = res.getString("datef"); 
    int nberstat = res.getInt("nberstat"); String strnberstat = Integer.toString(nberstat); 

    /////////////////////////////////// 
     try 
     { 
      java.sql.Statement st2 = c.createStatement(); 
      q="SELECT distinct (name), lname From stat s, employe e WHERE codew LIKE '"+codew+"'"; 
      ResultSet res2 = (ResultSet) st2.executeQuery(q); 
      while (res2.next()) 
      { 
      String name = res.getString("name"); 
      String lname = res.getString("lname"); 
      allW = name + " "+lname+", "+allW; 
      } 
     } 
     catch (SQLException s) 
     { 
      System.out.println("SQL code does not execute."); 
     } 

    ///////////////////////////// 

........ 

} 
c.close(); 
} 
catch (SQLException s){ 
System.out.println("SQL code does not execute."); 
} 

두 번째 쿼리를 콘솔에 표시합니다. SQL code does not execute. 미리 감사드립니다. 감사합니다. Ali

+0

이 쿼리를 사용하여보십시오.''DISTINCT (name), statname의 lname '', '+ codew +' ''또는''SELECT DISTINCT (name)' ' .codew LIKE ' "+ codew +"' ' –

+1

같은 메시지를 출력하고 있기 때문에 어느 캐치가 인쇄되고 있는지 알 수 없습니다. 그리고 예외를 잡아 내고 예외를 인쇄하지 않기 때문에 예외가 무엇인지 잘 알지 못합니다. 지문이 무엇인지 알려주기 위해 지문을 변경하고 문제가 무엇인지 알려주는's.getMessage()'를 추가합니다. –

답변

1

먼저 PreparedStatement에 "?"매개 변수를 사용해야합니다. SQL 주입을 막기 위해.

둘째, 당신은 두 번째 루프에서 잘못된 문을 사용하고 있습니다. res2이 아닌 res을 사용해야합니다.

이 있어야한다 :

String name = res2.getString("name"); //not res 
String lname = res2.getString("lname"); //not res 

셋째, 당신이 finally{} 블록을 추가하고 연결을 종료해야합니다.