3 回答

TA貢獻1836條經驗 獲得超3個贊
基本上:您可以連接到MySQL(或您使用的任何服務器)服務器,但不應直接從Android應用程序執行此操作。
原因:
可以對Android應用程序進行反編譯,并且客戶端將具有訪問數據庫的憑據。如果使用正確的黑客工具(如Backtrack),則此惡意客戶端可以訪問,連接和利用數據庫中的數據。
如果您的應用程序適用于世界各地的客戶端,則客戶端應按一個操作或一組操作打開并維護與數據庫的連接。即使您的PC客戶端位于數據庫引擎服務器旁邊的LAN中,打開物理數據庫連接也要花費很多時間。現在,想象一下從世界另一端的一個國家(例如中國或日本)或從南美的一個國家(例如巴西或秘魯)(我居住的國家)建立連接。
由于上述兩個原因,即使嘗試直接從您的電話設備連接到MySQL或任何其他數據庫引擎,這也是一個壞主意。
如何解決這個問題呢?使用面向服務的體系結構,其中至少要有兩個應用程序:
服務提供商應用程序。該應用程序將創建和發布Web服務(最好是RESTful),并可以建立使用Web服務的策略,例如用戶身份驗證和授權。該應用程序還將連接到數據庫并對數據庫執行CRUD操作。
服務使用者應用程序。這將是您的Android(或任何其他移動設備)應用程序。
從您的問題出發,您將重點放在第1點上。正如我在評論中所說,您可以使用Java創建一個Web應用程序,在其中創建一個RESTful服務,該服務可以歸結為一個POJO(普通的舊Java對象),每個服務都有一個方法。在這種方法中,由于畢竟是純Java,因此您可以添加其他功能,例如JDBC使用。
這是一個使用Jersey,Jackson(JSON庫)和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;
}
}
您可以在諸如mkyong或Vogella或其他類似的教程中檢查Java Web應用程序的進一步配置(此答案中沒有太多信息)。
請注意,然后此應用程序可以演變為分層應用程序,并且JDBC代碼將進入DAO類,然后ProductRestService該類將通過此DAO類訪問數據庫。這是另一個啟動示例:
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();
}
}
您可以將其他更改應用于此項目,也可以進行更改。
您能說一下PHP在這里做什么嗎?(如果我使用PHP開發)
不用用Java編寫服務提供程序應用程序(如上所示),而可以用PHP進行?;蚴褂肞ython,Ruby,C#,Scala或向您提供此技術的任何其他編程語言。同樣,我不確定您正在閱讀哪種類型的教程,但這應該在某處進行解釋,并說明出于該教程的目的,您將使用PHP創建服務。如果您覺得用Java而不是PHP或任何其他語言編寫這些服務感到更舒服,那沒有問題。您的android應用并不真正在乎使用哪種技術來生產Web服務,它只會在乎使用服務以及可以使用其中的數據。
添加回答
舉報