Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chúng ta có thể kết nối cơ sở dữ liệu MySQL từ xa trong Android bằng JDBC không?

Về cơ bản:bạn có thể kết nối với máy chủ MySQL (hoặc bất cứ thứ gì bạn sử dụng), nhưng bạn không nên thực hiện việc này trực tiếp từ ứng dụng Android của bạn.

Lý do:

  1. Các ứng dụng Android có thể được dịch ngược và ứng dụng khách sẽ có thông tin đăng nhập để truy cập vào cơ sở dữ liệu của bạn. Nếu sử dụng các công cụ hack phù hợp như Backtrack , thì ứng dụng khách độc hại này có thể truy cập, kết nối và khai thác dữ liệu trong cơ sở dữ liệu của bạn.

  2. Nếu ứng dụng của bạn dành cho các ứng dụng khách trên toàn thế giới, thì các ứng dụng khách phải mở và duy trì kết nối với cơ sở dữ liệu của bạn cho mỗi hoạt động hoặc tập hợp các hoạt động. Việc mở một kết nối cơ sở dữ liệu vật lý mất rất nhiều thời gian, ngay cả khi máy khách máy tính của bạn nằm trong mạng LAN bên cạnh máy chủ cơ sở dữ liệu. Bây giờ, hãy tưởng tượng mở một kết nối từ một quốc gia ở bên kia thế giới, ví dụ:Trung Quốc hoặc Nhật Bản hoặc từ một quốc gia ở Nam Mỹ như Brazil hoặc Peru (nơi tôi sống).

Vì 2 lý do này mà tôi có thể đưa ra, đó là một ý tưởng tồi ngay cả khi cố gắng kết nối với MySQL hoặc bất kỳ công cụ cơ sở dữ liệu nào khác trực tiếp từ thiết bị điện thoại của bạn.

Làm thế nào để giải quyết vấn đề này? Sử dụng kiến ​​trúc hướng dịch vụ mà bạn sẽ có ít nhất hai ứng dụng:

  1. Ứng dụng của nhà cung cấp dịch vụ. Ứng dụng này sẽ tạo và xuất bản các dịch vụ web (tốt nhất là RESTful) và có thể thiết lập các chính sách để sử dụng các dịch vụ web như xác thực và ủy quyền người dùng. Ứng dụng này cũng sẽ kết nối với cơ sở dữ liệu và thực thi các hoạt động CRUD dựa trên nó.

  2. Ứng dụng tiêu dùng dịch vụ. Đây sẽ là ứng dụng Android (hoặc bất kỳ thiết bị di động nào khác) của bạn.

Từ câu hỏi của bạn, bạn đang tập trung vào điểm 1. Như tôi đã nói trong phần nhận xét của mình, bạn có thể tạo một ứng dụng Web bằng Java, tạo một dịch vụ RESTful ở đó, dịch vụ này tổng hợp thành POJO (đối tượng java cũ thuần túy). có một phương pháp cho mỗi dịch vụ. Trong phương pháp này, vì xét cho cùng thì đó là Java thuần túy, bạn có thể thêm các chức năng khác như sử dụng JDBC.

Đây là một ví dụ khởi động bằng cách sử dụng Jersey, Jackson (thư viện JSON) và 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;
    }
}

Bạn có thể kiểm tra các cấu hình khác của ứng dụng web Java trong một hướng dẫn như mkyong's hoặc Vogella's hoặc bất kỳ câu trả lời nào tương tự của bạn (có quá nhiều thông tin để điền vào câu trả lời này).

Lưu ý rằng sau đó ứng dụng này có thể phát triển thành một ứng dụng nhiều lớp và mã JDBC sẽ nằm trong một lớp DAO và sau đó là ProductRestService lớp sẽ truy cập vào cơ sở dữ liệu thông qua lớp DAO này. Đây là một ví dụ khởi động khác:

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();
    }
}

Và bạn có thể áp dụng các thay đổi khác cho dự án này cũng như đang phát triển.

Bạn có thể cho tôi biết PHP làm gì ở đây không? (nếu tôi phát triển bằng PHP)

Thay vì viết ứng dụng Nhà cung cấp dịch vụ bằng Java (như hình trên), bạn có thể thực hiện bằng PHP. Hoặc bằng Python, Ruby, C #, Scala hoặc bất kỳ ngôn ngữ lập trình nào khác cung cấp công nghệ này cho bạn. Một lần nữa, tôi không chắc bạn đang đọc loại hướng dẫn nào, nhưng điều này nên được giải thích ở đâu đó và giải thích rằng với mục đích của hướng dẫn đó, bạn sẽ tạo các dịch vụ bằng PHP. Nếu bạn cảm thấy thoải mái hơn khi viết các dịch vụ này bằng Java hơn là bằng PHP hoặc bất kỳ ngôn ngữ nào khác, thì không có vấn đề gì. Ứng dụng android của bạn không thực sự quan tâm đến công nghệ nào được sử dụng để sản xuất các dịch vụ web, nó sẽ chỉ quan tâm đến việc sử dụng các dịch vụ và dữ liệu từ chúng có thể được sử dụng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách kết nối với cơ sở dữ liệu MySQL

  2. MySQL và JDBC với rewriteBishedStatements =true

  3. MySQL nhận vị trí hàng trong ORDER BY

  4. Làm cách nào để lấy ID được chèn cuối cùng của bảng MySQL trong PHP?

  5. Cách thu hút người dùng mới mỗi ngày trong MySQL