2011-03-25 72 views
0

我試圖從數據庫中獲取數據。嵌套的SELECT查詢Java + MySQL

我必須使用查詢。

從第一個查詢(In循環)中,我得到工作代碼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. 在此先感謝。 最好的問候, 阿里

+0

嘗試使用這個查詢'SELECT DISTINCT(name),lname from stat s,employe e WHERE s.codew LIKE'「+ codew +」'''或'SELECT DISTINCT(name),lname from stat s,employe e WHERE e .codew LIKE'「+ codew +」'' – 2011-03-25 03:43:35

+1

由於您輸出的是相同的信息,因此您不知道打印的是哪種漁獲物。因爲你在捕捉它而不是打印異常...你不知道什麼是異常。我會改變你的印刷品,告訴你它是什麼,並且添加's.getMessage()'給他們,這會告訴你問題是什麼。 – 2011-03-25 03:44:21

回答

1

首先你應該使用PreparedStatement SQL參數「?」防止Sql注入。

其次,您在第二個循環中使用了錯誤的語句。您應該使用res2而不是res

這應該是:

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

第三,你應該添加finally{}塊,並關閉您的連接。