Android 應用程序通常需要與服務器交互,其中包括訪問數據庫。MySQL 是一種常用的關系型數據庫,下面我們將討論如何在 Android 應用程序中使用網絡訪問 MySQL 實現增刪改查。
在 Android 中實現網絡訪問需要使用到 AsyncTask,該類可以將耗時操作在后臺線程中執行,并將結果回調到主線程中。
下面是一個訪問 MySQL 獲取所有記錄的示例代碼:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new GetAllDataTask().execute(); } private class GetAllDataTask extends AsyncTask{ @Override protected String doInBackground(Void... params) { String result = ""; String host = "192.168.1.101"; String port = "3306"; String database = "test"; String username = "root"; String password = "123456"; try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://" + host + ":" + port + "/" + database, username, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from student"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); result += "id=" + id + ",name=" + name + ",age=" + age + "\n"; } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } return result; } @Override protected void onPostExecute(String result) { TextView textView = (TextView) findViewById(R.id.textView); textView.setText(result); } } }
上述代碼中,GetAllDataTask 類繼承自 AsyncTask,它的 doInBackground 方法中執行數據庫訪問操作。在該方法中,首先通過 DriverManager 獲取數據庫連接,然后創建 Statement 對象執行 SQL 查詢語句,最后通過 ResultSet 對象獲取查詢結果。
如果需要插入、更新或刪除數據,只需要修改 SQL 語句即可,例如插入一條記錄:
PreparedStatement pstmt = conn.prepareStatement( "insert into student (name, age) values (?, ?)"); pstmt.setString(1, "Tom"); pstmt.setInt(2, 20); pstmt.executeUpdate();
如果需要執行帶參數的 SQL 語句,可以使用 PreparedStatement,例如查詢指定姓名的記錄:
PreparedStatement pstmt = conn.prepareStatement( "select * from student where name = ?"); pstmt.setString(1, "Tom"); ResultSet rs = pstmt.executeQuery();
除了使用 JDBC 訪問 MySQL 外,還可以使用 Web 服務接口獲取數據庫數據。例如,可以編寫一個 PHP 文件,在其中實現數據庫訪問操作并返回 JSON 格式的數據。Android 應用程序使用 AsyncTask 發送 HTTP 請求并解析 JSON 數據即可,這樣做的好處是可以在服務器端對數據進行安全性、權限控制等處理。