execução fora de ordem sem thread

4 respostas
cracatio
public Hashtable listaDeSuportesPorPlantas(String[] planta, String projeto,
            double origem_x, double origem_y, double origem_z)throws SQLException{
        Statement st;
        Hashtable listagem = new Hashtable();
        int i = 0;
        int contaSuportes = 0;
        st = conn.createStatement();
        int k = 0;
        
        while ( i < planta.length){
            System.out.println(planta[i]  + " " + i +"/" + planta.length);
            
            // lista todas as vistas de uma planta
            ResultSet resultPlantas = st.executeQuery("SELECT pd121.DRAWING_NO," +
                    " pd122.DWG_VIEW_X_LOW," +
                    " pd122.DWG_VIEW_Y_LOW," +
                    " pd122.DWG_VIEW_Z_LOW," +
                    " pd122.DWG_VIEW_X_HIGH," +
                    " pd122.DWG_VIEW_Y_HIGH," +
                    " pd122.DWG_VIEW_Z_HIGH " +
                    "FROM PD_" + projeto +
                    ".PDTABLE_121 pd121 INNER JOIN PD_" + projeto +
                    ".PDTABLE_122 pd122 ON " +
                    "pd121.DWG_INDEX_NO = pd122.DWG_INDEX_NO " +
                    "WHERE pd121.DRAWING_NO = '" + planta[i] +"'");
                      
            
            while (resultPlantas.next()){
                System.out.println(resultPlantas.getString(1));
                System.err.println(" --------------------   ///  ----------------------");
                double plan_x_min = Double.parseDouble(resultPlantas.getString(2)) / 80;
                double plan_y_min = Double.parseDouble(resultPlantas.getString(3)) / 80;
                double plan_z_min = Double.parseDouble(resultPlantas.getString(4)) / 80;
                
                double plan_x_max = Double.parseDouble(resultPlantas.getString(5)) / 80;
                double plan_y_max = Double.parseDouble(resultPlantas.getString(6)) / 80;
                double plan_z_max = Double.parseDouble(resultPlantas.getString(7)) / 80;
                
                double plan_x_min_ok = verifMin(plan_x_min, plan_x_max);
                double plan_y_min_ok = verifMin(plan_y_min, plan_y_max);
                double plan_z_min_ok = verifMin(plan_z_min, plan_z_max);
                
                double plan_x_max_ok = verifMax(plan_x_min, plan_x_max);
                double plan_y_max_ok = verifMax(plan_y_min, plan_y_max);
                double plan_z_max_ok = verifMax(plan_z_min, plan_z_max);
                
                
                plan_x_min_ok = plan_x_min_ok + origem_x;
                plan_y_min_ok = plan_y_min_ok + origem_y;
                plan_z_min_ok = plan_z_min_ok + origem_z;
                
                plan_x_max_ok = plan_x_max_ok + origem_x;
                plan_y_max_ok = plan_y_max_ok + origem_y;
                plan_z_max_ok = plan_z_max_ok + origem_z;
                
                System.out.println(plan_x_min);
                System.out.println(plan_y_min);
                System.out.println(plan_z_min);
                System.out.println(plan_x_max);
                System.out.println(plan_y_max);
                System.out.println(plan_z_max);
            }
            i++;
        }
        return listagem;
    }

o código acima está gerando um resultado errado.
Gostaria de ressaltar que em nehum momento do código da aplicação estou usando Threads nem na classe bancoDeDados onde executo as SQL´S.

Segue o resultado gerado pelo código acima:
4417-795-DES-0-TUB-215 0/1
4417-795-DES-0-TUB-215
 --------------------   ///  ----------------------
-343000.0
-202799.9875
100000.0
-362500.0
-189799.9875
 --------------------   ///  ----------------------
 --------------------   ///  ----------------------
107040.0
4417-795-DES-0-TUB-215
 --------------------   ///  ----------------------
-343000.0
-226599.9875
100000.0
-351000.0
-202799.9875
107040.0
4417-795-DES-0-TUB-215
-343000.0
-202799.9875
107040.0
-362500.0
-189799.9875
115000.0
4417-795-DES-0-TUB-215
-343000.0
-226599.9875
107040.0
-351000.0
-202799.9875
115000.0

Se não fosse pelo fato de as informãções estarem totalmente fora da sequencia do código. Estária tudo correto.

Não consigo entender o porque disso estar acontecendo. ASe alguém puder ajudar. Fico muito grato

4 Respostas

Aldrin_Leal

Não convém por uma cláusula ORDER BY no seu select?

cracatio

Não. A consulta está vindo certa se repararem o que está vindo errado é a ordem od System.out.prinln(). Dá a impressão que o código não está sendo executado sequencialmente. como deveria.

T
System.out.println(resultPlantas.getString(1));
                 System.err.println(" --------------------   ///  ----------------------");

Amigo, System.out e System.err são “streams” diferentes que casualmente são mostradas no mesmo lugar (a saída do console). Só que normalmente System.out é bufferizada e System.err não é bufferizada.

Para corrigir isso, use só uma saída (System.out ou System.err).

cracatio

obrigado.

já fiz esta correção mas continua fora de ordem.

Criado 16 de julho de 2007
Ultima resposta 16 de jul. de 2007
Respostas 4
Participantes 3