Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy możemy połączyć zdalną bazę danych MySQL w systemie Android za pomocą JDBC?

Zasadniczo:możesz połączyć się ze swoim serwerem MySQL (lub czymkolwiek, czego używasz), ale nie powinieneś zrób to bezpośrednio z aplikacji na Androida.

Powody:

  1. Aplikacje na Androida można dekompilować, a klient będzie miał poświadczenia dostępu do Twojej bazy danych. Jeśli używasz odpowiednich narzędzi hakerskich, takich jak Backtrack , ten złośliwy klient może uzyskać dostęp, połączyć się i wykorzystać dane w Twojej bazie danych.

  2. Jeśli aplikacja jest przeznaczona dla klientów na całym świecie, klienci powinni otwierać i utrzymywać połączenie z bazą danych na operację lub zestaw operacji. Otwarcie fizycznego połączenia z bazą danych zajmuje dużo czasu, nawet jeśli klient PC znajduje się w sieci LAN obok serwera silnika bazy danych. A teraz wyobraź sobie otwarcie połączenia z kraju na drugim końcu świata, np. Chiny lub Japonia lub z kraju w Ameryce Południowej, takiego jak Brazylia lub Peru (gdzie mieszkam).

Z tych dwóch powodów, które mogę wymyślić, jest to zły pomysł nawet próba połączenia się z MySQL lub innym silnikiem bazy danych bezpośrednio z urządzenia telefonicznego.

Jak rozwiązać ten problem? Użyj architektury zorientowanej na usługi, w której będziesz mieć co najmniej dwie aplikacje:

  1. Aplikacja dostawcy usług. Ta aplikacja będzie tworzyć i publikować usługi internetowe (najlepiej RESTful) i może ustanawiać zasady korzystania z usług internetowych, takie jak uwierzytelnianie i autoryzacja użytkowników. Ta aplikacja połączy się również z bazą danych i wykona na niej operacje CRUD.

  2. Aplikacja konsumenta usługi. To byłaby Twoja aplikacja na Androida (lub dowolna inna mobilna).

Od twojego pytania skupiasz się na punkcie 1. Jak wspomniałem w moich komentarzach, możesz stworzyć aplikację internetową w Javie, stworzyć tam usługę RESTful, która sprowadza się do POJO (zwykły stary obiekt java), który ma metodę na usługę. W tej metodzie, ponieważ jest to w końcu czysta Java, możesz dodać inne funkcje, takie jak użycie JDBC.

Oto przykład uruchomienia z użyciem Jersey, Jackson (biblioteka JSON) i JDBC:

@Path("/product")
public class ProductRestService {

    @GET
    @Path("/list")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Product> getProducts() {
        List<Product> productList = new ArrayList<>();
        Connection con = ...; //retrieve your database connection
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT id, name FROM product");
        while (rs.next()) {
            Product product = new Product();
            product.setId(rs.getInt("id"));
            product.setName(rs.getString("name"));
            productList.add(product);
        }
        //ALWAYS close the resources
        rs.close();
        stmt.close();
        conn.close();
        return productList;
    }
}

Dalsze konfiguracje aplikacji internetowej Java można sprawdzić w samouczku, takim jak mkyong lub Vogella lub dowolny inny podobny (za dużo informacji, aby umieścić je w tej odpowiedzi).

Zauważ, że wtedy ta aplikacja może ewoluować w aplikację warstwową, a kod JDBC trafi do klasy DAO, a następnie do ProductRestService class uzyska dostęp do bazy danych za pośrednictwem tej klasy DAO. Oto kolejny przykład rozpoczęcia:

public class ProductDao {
    public List<Product> getProducts() {
        List<Product> productList = new ArrayList<>();
        Connection con = ...; //retrieve your database connection
        //the rest of the code explained above...
        return productList;
    }
}

@Path("/product")
public class ProductRestService {
    @GET
    @Path("/list")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Product> getProducts() {
        ProductDao productDao = new ProductDao();
        return productDao.getProducts();
    }
}

I możesz zastosować inne zmiany do tego projektu, jak również się rozwija.

Czy możesz mi powiedzieć, co robi tutaj PHP? (jeśli programuję w PHP)

Zamiast pisać aplikację dostawcy usług w Javie (jak pokazano powyżej), możesz to zrobić w PHP. Lub w Pythonie, Ruby, C#, Scali lub dowolnym innym języku programowania, który zapewnia Ci tę technologię. Ponownie, nie jestem pewien, jaki rodzaj samouczka czytasz, ale należy to gdzieś wyjaśnić i wyjaśnić, że na potrzeby tego samouczka będziesz tworzyć usługi za pomocą PHP. Jeśli czujesz się bardziej komfortowo pisząc te usługi w Javie niż w PHP lub jakimkolwiek innym języku, nie ma problemu. Twoja aplikacja na Androida tak naprawdę nie dba o to, która technologia jest używana do tworzenia usług internetowych, zależy jej tylko na korzystaniu z usług io tym, że dane z nich mogą być wykorzystywane.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Wstaw rekord, jeśli nie istnieje w tabeli

  2. Przesyłanie strumieniowe dużych zestawów wyników za pomocą MySQL

  3. Jak uzupełnić ciąg znakami wiodącymi/końcowymi w MySQL — LPAD(), RPAD()

  4. Jak czytać pliki dziennika binarnego MySQL (BinLog) za pomocą mysqlbinlog

  5. Ściągawka z wydajnością MySQL