Вложенный запрос SELECT Java + MySQL - PullRequest
0 голосов
/ 25 марта 2011

Я пытаюсь получить данные из БД.

Я должен использовать для запросов.

Из первого запроса (в цикле) я получаю код Work 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. Спасибо заранее.С уважением, Али

1 Ответ

1 голос
/ 25 марта 2011

Прежде всего вы должны использовать PreparedStatement с параметрами sql "?" для предотвращения инъекций Sql.

Во-вторых, вы используете неправильный оператор во втором цикле. Вы должны использовать res2, а не res.

Это должно быть:

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

В-третьих, вы должны добавить блок finally{} и закрыть соединение.

...