此示例向您展示如何直接从 Android 连接和读取 MySQL 数据库中的数据。以下步骤和代码片段将向您展示如何做到这一点。
将 MySQL JDBC 驱动程序添加到您的项目依赖项中。打开app/build.gradle
文件并添加依赖项。
...
...
dependencies {
...
...
implementation 'mysql:mysql-connector-java:5.1.49'
}
如果您想连接到 MariaDB,您可以使用 更改 JDBC 驱动程序依赖项,还可以通过替换为来'org.mariadb.jdbc:mariadb-java-client:1.8.0'
更新代码片段中的 JDBC url 。mysql
mariadb
接下来,在文件中为我们的应用程序添加互联网权限AndroidManifest.xml
。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.kodejava.android">
<uses-permission android:name="android.permission.INTERNET" />
...
...
</manifest>
让我们连接,从数据库中读取数据并在屏幕上显示信息。在代码片段中,我们创建一个AsyncTask
从数据库中读取信息。在该doInBackground()
方法中,我们打开与数据库的连接,创建 a PreparedStatement
,执行查询,获取 aResultSet
并从中读取信息。我们将数据打包到 a 中Map
并返回。
doInBackground()
方法完成执行后,onPostExecute()
将调用该方法。在此方法中,我们获取方法Map
返回的结果,doInBackground()
并将值设置到TextView
组件中以进行显示。
package org.kodejava.android;
import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private static final String URL = "jdbc:mysql://192.168.0.107:3306/kodejava";
private static final String USER = "kodejava";
private static final String PASSWORD = "kodejava";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new InfoAsyncTask().execute();
}
@SuppressLint("StaticFieldLeak")
public class InfoAsyncTask extends AsyncTask<Void, Void, Map<String, String>> {
@Override
protected Map<String, String> doInBackground(Void... voids) {
Map<String, String> info = new HashMap<>();
try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD)) {
String sql = "SELECT name, address, phone_number FROM school_info LIMIT 1";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
info.put("name", resultSet.getString("name"));
info.put("address", resultSet.getString("address"));
info.put("phone_number", resultSet.getString("phone_number"));
}
} catch (Exception e) {
Log.e("InfoAsyncTask", "Error reading school information", e);
}
return info;
}
@Override
protected void onPostExecute(Map<String, String> result) {
if (!result.isEmpty()) {
TextView textViewName = findViewById(R.id.textViewName);
TextView textViewAddress = findViewById(R.id.textViewAddress);
TextView textViewPhoneNumber = findViewById(R.id.textViewPhone);
textViewName.setText(result.get("name"));
textViewAddress.setText(result.get("address"));
textViewPhoneNumber.setText(result.get("phone_number"));
}
}
}
}
- 最后,这是我们的 Android 应用程序的屏幕截图。
完整的源代码可以在我们的 GitHub 存储库中访问:android-mysql-example。