Obsluga wyjatkow metoda run() w watku

0

Heja.

Mam powazny problem ;) wyciskam poty na zadanko do szkoły i napotkałem się na ogromną przeszkodę.
Otóż mam programik serwerowy który ma łączyć się z bazą danych (systemowe ODBC) i za pomoca watkow obslugiwac klientow w sposob wspolbiezny. Mam problem przy metodzie run()

@Override public void run() throws IOException , ClassNotFoundException , SQLException
    {

            String mojeDSN = "Loty";
            String dbURL = "jdbc:odbc:" + mojeDSN;
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con = DriverManager.getConnection(dbURL, "","");
            Statement s = con.createStatement();

            PrintWriter out = new PrintWriter(commsock.getOutputStream(), true);
            BufferedReader in = new BufferedReader( new InputStreamReader(commsock.getInputStream()));
            String inputLine, outputLine;

            System.out.println("Watek oblsugi klienta uruchomiony");

            boolean x = true;

            do
            {
                String selectString = null;
                String[] tabKolumn = null;
                String[] tabRekordKolumn = new String[1];

                outputLine = "Tabela \"Przyloty\" zawiera kolejno kolumny: ID, Carrier, Flight Number, Time, Gate, City, Remarks";
                out.println(outputLine);
                outputLine = "Podaj kolumny bazy oddzielone tylko przecinkami: ";
                out.println(outputLine);
                String kolumny = in.readLine();

                tabKolumn = kolumny.split(",");

                outputLine = "Podaj kolumne szukanego rekordu: ";
                out.println(outputLine);
                String rekordKolumn = in.readLine();

                tabRekordKolumn[0] = rekordKolumn;

                outputLine = "Podaj wyszukiwany rekord: ";
                out.println(outputLine);
                String rekord = in.readLine();

                
            }while(x);
            in.close();
            out.close();
            s.close();
            con.close();
            commsock.close();
    }

pierwsza linia w NetBeans podkresla mi sie na czerwono blędem i nie kompiluje. Oto tresc errora:

run() in program.Watek cannot implement run() in java.lang.Runnable; overriden method does not throw java.sql.SQLException

probowalem z try i catch ale zas wtedy podkresla mi że

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(dbURL, "","");

unreported exception java.sql.SQLException; must be declared to be thrown

proszę pomocy :D

z góry dziękuję

sheezol

0

Tak jak mowi komunikat, metoda run nie ma w sygnaturze zadnego wyjatku, wiec implementacje nie moga go dodac. Musisz z kazdym wyjatkiem cos robic. Pomysl o metodzie run jak o metodzie main - w niej tworzysz jakis obiekt odpowiedzialny za aplikacje (obsluga klienta), i tam te watki lapiesz, elegancko sie z nimi obchodzisz (logujesz, pokazujesz komunikat, cokolwiek) i konczysz prace. Wzglednie mozesz opakowac wyjatki w RuntimeException - takie juz mozesz rzucac z runa, ale nie polecam, nie wydaje mi sie to eleganckie (chociaz wyjatki w javie i szczegolnie checked exceptions, jak wlasnie SQLException, to wieloletnia klotnia i swieta wojna, poszukaj w necie jesli Cie interesuje).

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