Problem z algorytmem - dziwne zachowanie

0

Sorry za słaby temat ale nie miałem lepszego pomysłu. Mam następujący problem. Napisałem dziadostwo wyszukujące dane z bazy sqlowej, w zależności od uzupełnionych tf'ów. Kod generuje dynamicznie zapytanie. Samo zapytanie działa fajnie i szybko wyszukuje nawet spore porcje danych. Chciałbym jednak aby "lepiej trafione dane" były wyżej wypozycjonowane w tabeli z wynikami. Wpadłem na pomysł że dodam to tabeli kolumne do której będę dodawał wartość jeśli wyszukiwany element będzie się pokrywał z bazą. Nie wiem czemu ale wszystko działa do momentu gdy nie szukam więcej niż dwóch parametrów. Nie mam pojęcia o co chodzi.

KOD :

bufor=(String)slJava.getText();

if (bufor!=null&&!bufor.equals("")){

int buforint = Integer.parseInt(bufor);
    if (licznik!=0){
        wherequery.append(" OR ");
    }
    if (buforint==1){
        wherequery.append(" java between 1 and 3");}
    if (buforint==2){
        wherequery.append(" java between 2 and 3");}
    if (buforint==3){
        wherequery.append(" java=3");

    }

    licznik++;



try {

             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
             Connection conn = DriverManager.getConnection(sql.url, sql.login,sql.password);

        try {

            
            Statement st = conn.createStatement();


            


    ResultSet rs2 = st.executeQuery("SELECT * FROM dbo.Kandydaci WHERE java between 1 and 3");
                     
            while(rs2.next()){
                     
                      trafnosc = rs2.getInt("trafnosc");    
                     
                     }
    trafnosc=trafnosc+45;

st.executeUpdate ("UPDATE dbo.Kandydaci SET trafnosc='"+trafnosc+"' WHERE java between 1 and 3");
 }
        catch (SQLException e) {
                e.printStackTrace();

             }
}

        catch (SQLException e) {
        System.out.println("Uwaga! Mamy problemy z połączeniem!");
       e.printStackTrace();


                                }

}

Pól jest cała masa, ale kod w nich jest analogiczny.

0

Do czego służy zmienna wherequery? Co nie działa? Wielkość wcięć losujesz? Tego się nie da czytać.

0

Wherequery to łańcuch który tworzy zapytanie w zależności od wybranych opcji. Problem jest że zmienną trafność w założeniu w momencie gdy użytkownik przy wyszukiwaniu wybierze parametr znajdujący sie w bazie program ma pobrać wartość kolumny trafność dla tego rekordu dodać pewną wartos i wstawić zmienną powiększona o ta wartość. Wszystko działa jeśli użytkownik robi przeszukanie po max 2 elementach. Przy trzech wartość trafności jest identyczna jak przy 2. Sorry za wciecia, jak tylko dojade do roboty to poprawie, z telefonu nie da rady.

0

100% racji wkleiłem za dużo, wklejam tylko fragment odpowiedzialny za trafność z normalnymi wcięciami :)

try {

             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
             Connection conn = DriverManager.getConnection(sql.url, sql.login,sql.password);

                try {

            
                        Statement st = conn.createStatement();
                        ResultSet rs2 = st.executeQuery("SELECT * FROM dbo.Kandydaci WHERE java between 1 and 3");
                     
                                 while(rs2.next()){
                     
                                        trafnosc = rs2.getInt("trafnosc");    
                     
                                                  }
                        
                        trafnosc=trafnosc+45;
                        st.executeUpdate ("UPDATE dbo.Kandydaci SET trafnosc='"+trafnosc+"' WHERE java between 1 and 3");
                    }
                catch (SQLException e) {
                
                    e.printStackTrace();

                                        }
}
catch (SQLException e) {
        
       System.out.println("Uwaga! Mamy problemy z połączeniem!");
       e.printStackTrace();


                       }
0

Nikt tego nie sprawdzi, więc opisz może jakich zmian oczekujesz, a jakie następują. Wyszukujesz wszystkich użytkowników spełniających warunek "WHERE java between 1 and 3", odczytujesz trafnosc ostatniego (w przypadkowej kolejności) z nich, zmieniasz wszystkim trafnosc na tę zapamiętaną powiększona o 45. Jaki to ma sens?

0

Dzieki, znalazłem błąd w rozumowaniu. Nie pomyślałem ze sprawdzam trafność z ostatniego rekordu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1