Android studio i brak sterownika od JDBC

0

Witam,
od paru dni mam problem z nawiązaniem połączenia z bazą danych. Piszę aplikację pozwalającą klientom na sprawdzanie statusu naprawy poprzez telefon. Środowisko to Android Studio, a mój problem polega na brakującym sterowniku od JDBC. Za nic w świecie nie mogę znaleźć opisywanej opcji pod PPM mówiącej o dodaniu pliku .jar do projektu.
Czy mógłby mi ktoś wytłumaczyć "jak krowie na rowie" jak to zrobić?
Poniżej skromny kod testowy z jakiego korzystam:

public class Main22Activity extends AppCompatActivity  {

    @Override
    protected void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main22);

        if (Build.VERSION.SDK_INT >= 11) {
            android.support.v7.app.ActionBar bar = getSupportActionBar();

            if (bar != null) {
                bar.hide();
            }
        }



                String polaczenieURL = "jdbc:mysql://mysql.hostinger.pl/xxx?user=xxxt&password=xxx";
                //Tworzymy proste zapytanie doa bazy danych
                String query = "Select * FROM testtab";

                Connection conn = null;

                try {

                    //Ustawiamy dane dotyczące podłączenia
                    conn = DriverManager.getConnection(polaczenieURL);

                    //Ustawiamy sterownik MySQL
                    Class.forName("com.mysql.jdbc.Driver");

                    //Uruchamiamy zapytanie do bazy danych
                    Statement stmt = conn.createStatement();
                    ResultSet rs = stmt.executeQuery(query);

                    while (rs.next()) {
                        wyswietlDaneZBazy(rs);
                    }

                    conn.close();
                }
                //Wyrzuć wyjątki jężeli nastąpią błędy z podłączeniem do bazy danych lub blędy zapytania o dane
                catch(ClassNotFoundException wyjatek) {
                    System.out.println("Problem ze sterownikiem");
                }

                catch(SQLException wyjatek) {
                    System.out.println("Problem z logowaniem\nProsze sprawdzic:\n nazwę użytkownika, hasło, nazwę bazy danych lub adres IP serwera");
                    System.out.println("SQLException: " + wyjatek.getMessage());
                    System.out.println("SQLState: " + wyjatek.getSQLState());
                    System.out.println("VendorError: " + wyjatek.getErrorCode());
                }

            }
            void wyswietlDaneZBazy(ResultSet rs){
                try{
                    String danezBazy = rs.getString(1);

                    String myText = rs.getString(1);

                    TextView textView = (TextView)findViewById(R.id.textView2);
                    textView.setText(myText);

                    System.out.println("SUKA DZIAŁA");
                }catch(SQLException e) {
                    e.printStackTrace();
                }
            }
 

Oraz błąd przy próbie połączenia z bazą danych:

09-29 22:25:21.300    3701-3701/com.maxima_it.myapplication I/System.out﹕ SQLException: No suitable driver
09-29 22:25:21.300    3701-3701/com.maxima_it.myapplication I/System.out﹕ SQLState: 08001
09-29 22:25:21.300    3701-3701/com.maxima_it.myapplication I/System.out﹕ VendorError: 0

H E L P

1

Takim rozwiązaniem możesz szybko stracić hasła do bazy danych, nie łącz się bezpośrednio z baza za pomocą klienta mobilnego, tylko wykorzystaj sposób pośredni, tzn - łączysz się np. aplikacją mobilną z servlet'em i dopiero on się łączy z bazą danych, która jest na tym samym serwerze.

0

a może trzeba dodać po prostu do gradla zleżność do jdbc ?

ale generalnie pomysł bezpośredniego łączenia się do bazy danych jest z założenia bardzo zły.

pzdr

0

Dziękuje Wam za odpowiedzi. Spotkałem się w internecie z opiniami, że jest to zły sposób. Z drugiej jednak strony aplikacja będzie przeznaczona wyłącznie dla klientów, którzy posiadają aktywne zlecenia w naszym serwisie - wymagane będzie zalogowanie się poprzez podanie numeru telefonu oraz zlecenia i zaplanowałem, że to będzie sprawdzane metodą "bezpieczną".

Czyli w skrócie, jeżeli potencjalny zły człowiek nie będzie znał numeru zlecenia oraz telefonu, które do siebie pasują -> nie dostanie się do modułu ze szczegółami zlecenia --> nie wykradnie danych dostępu do bazy danych.

Dobrze myślę, czy źle? :-)

0

jak juz masz baze danych i serwer na ktorym to stoi postaw najprostszy serwer REST-a i lacz sie przez to w apce.

bo juz pomijajac kwestie bezpieczenstwa to puszczanie query do bazy danych po sieci jest slabe

0

Rozumiem. Czyli w skrócie muszę teraz opanować kwestię RESTa (pierwszy raz o tym słyszę, ale natknąłem się na to szukając rozwiązania problemu w google) i zrobić to jak należy. Czy możecie polecić mi jakiś poradnik jak w to wejść ze zrozumieniem? Niekoniecznie po polsku, chociaż ułatwiłoby to sprawę.

Pozdrawiam.

0
Kudryk napisał(a):

Czyli w skrócie, jeżeli potencjalny zły człowiek nie będzie znał numeru zlecenia oraz telefonu, które do siebie pasują -> nie dostanie się do modułu ze szczegółami zlecenia --> nie wykradnie danych dostępu do bazy danych.

Dobrze myślę, czy źle? :-)

Źle myślisz, potencjalny zły człowiek nawet nie musi posiadać Twojej aplikacji, by dostać się do Twojej bazy danych, gdzie zakładam są informacje na temat wszystkich zleceń. Wystarczy, że podsłucha ruch w sieci, w której łączysz się z bada danych poprzez klienta mobilnego, dane nie są szyfrowane, więc nie będzie z tym żadnego problemu. Dwa, nie będzie żadnych problemów z wyciągnięciem takich danych jak hasło do bazy oraz login, z Twojej aplikacji, nie muszę znać żadnych informacji dotyczącej Twojego zlecenia.

Co proponuję?
Nie łączyć się z bazą bezpośrednio, poczytaj o REST serwerach, a dokładniej na Twoim miejscu bym postawił servlet na serwerze, na którym znajduję się baza i w nim łączył się do niej. Ty za pomocą protokołu http(s) z aplikacji klient łączysz się z servletem, wysyłasz odpowiednie zapytania, stworzone przez Ciebie i servlet zwraca Ci odpowiednia wartość, np. jakieś dane pobrane z bazy danych.

0

Ok temat można zamknąć, dziękuje wszystkim za pomoc :-)

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