本文主要介绍了如何在安卓系统中使用MySQL数据库进行查询,并详细描述了相关的安卓界面设计和Windows系统的相关操作。
安卓界面
1、创建一个新的安卓项目,选择Empty Activity模板。

(图片来源网络,侵删)
2、在activity_main.xml文件中添加一个EditText用于输入SQL语句,一个Button用于执行查询,一个TextView用于显示查询结果。
<?xml version="1.0" encoding="utf8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/resauto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/et_sql"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入SQL语句" />
<Button
android:id="@+id/btn_query"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="执行查询" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</ScrollView>
</LinearLayout>
3、在MainActivity.java文件中编写按钮点击事件,实现查询功能。
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MainActivity extends AppCompatActivity {
private EditText etSql;
private Button btnQuery;
private TextView tvResult;
private static final String DB_URL = "jdbc:mysql://localhost:3306/test"; // 数据库地址和端口号,根据实际情况修改
private static final String USER = "root"; // 数据库用户名,根据实际情况修改
private static final String PASSWORD = "123456"; // 数据库密码,根据实际情况修改
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etSql = findViewById(R.id.et_sql);
btnQuery = findViewById(R.id.btn_query);
tvResult = findViewById(R.id.tv_result);
btnQuery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sql = etSql.getText().toString(); // 获取输入的SQL语句
try {
Class.forName("com.mysql.jdbc.Driver"); // 加载驱动类
Connection connection = DriverManager.getConnection(DB_URL, USER, PASSWORD); // 建立数据库连接
Statement statement = connection.createStatement(); // 创建Statement对象,用于执行SQL语句
ResultSet resultSet = statement.executeQuery(sql); // 执行查询,获取结果集
StringBuilder result = new StringBuilder(); // 用于存储查询结果的字符串拼接器
while (resultSet.next()) { // 遍历结果集,将每一行数据拼接到result中
for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) { // 获取列数,从第1列开始拼接数据,因为第1列是表头,不需要拼接到结果中
result.append(resultSet.getString(i)).append("\t"); // 拼接数据,用制表符分隔每个字段的值,最后一个字段后不添加制表符
}
result.append(""); // 每拼接完一行数据,添加一个换行符,方便查看结果
}
tvResult.setText(result.toString()); // 将查询结果显示在TextView中,关闭数据库连接和Statement对象(自动关闭)
} catch (Exception e) { // 捕获异常,输出错误信息到Logcat中,方便调试问题所在位置和原因,避免程序崩溃或出现未知错误情况的发生,e是Throwable类型的变量,可以接收任何类型的异常信息,这里只打印了异常的堆栈信息,如果需要更详细的异常信息,可以使用e的getMessage()方法获取异常的具体描述信息,注意:不要使用e来处理异常,因为这样会丢失异常的详细信息,应该使用trycatch块来捕获异常并处理它,否则,如果出现异常,程序将无法正常执行下去,也要注意不要在catch块中使用throw关键字抛出新的异常,这样做会导致原来的异常被忽略掉,而且也无法得到正确的异常信息,最好的做法是在catch块中记录异常信息或者向上层调用者传递异常信息,如果需要重新抛出异常,可以使用RuntimeException包装一下原始的异常对象再抛出去,这样可以保留原始的异常信息,同时也不会影响程序的正常执行流程,如果需要向上层调用者传递异常信息,可以使用回调函数或者观察者模式来实现,这样可以避免在代码中直接使用trycatch块来处理异常的情况发生,同时也可以保证程序的稳定性和可靠性,另外需要注意的是:在使用trywithresources语句时,不需要显式地关闭资源对象,因为trywithresources语句会自动关闭实现了AutoCloseable接口的资源对象,如果没有实现该接口的资源对象需要手动关闭的话,可以在finally块中关闭它们,但是需要注意:finally块中的代码只有在try块中的代码执行成功时才会执行,如果try块中的代码出现了异常情况导致程序跳转到了catch块中执行的话,那么finally块中的代码就不会被执行了,最好的做法是将需要关闭的资源对象放在trywithresources语句中进行管理,这样可以避免忘记关闭资源对象而导致的问题发生,同时也可以简化代码结构,提高代码的可读性和可维护性,对于没有实现AutoCloseable接口的资源对象来说,可以使用tryfinally语句来确保它们能够被正确地关闭掉,InputStream is = null; try { is = new FileInputStream("file path"); ... } finally { if (is != null) { is.close(); } } } catch (Exception e) { LogUtils.e("MainActivity", e); } } catch (ClassNotFoundException e) { LogUtils.e("MainActivity", e); } } catch (SQLException e) { LogUtils.e("MainActivity", e); } } finally { try { if (connection != null) { connection.close(); } if (statement != null) { statement.close(); } } catch (SQLException e) { LogUtils.e("MainActivity", e); } } } finally { try { if (resultSet != null) { resultSet.close(); } } catch (SQLException e) { LogUtils.e("MainActivity", e); } } } finally { try { if (driver != null) { driverManager.registerDriver(driver); } } catch (SQLException e) { LogUtils.e("MainActivity", e); } } }}}
| 序号 | 安卓端操作/设置 | Windows端操作/设置 | |
| 1 | 数据库连接 | 使用 JDBC 驱动连接 MySQL 数据库 | 使用 Navicat 等 GUI 工具连接 |
| 2 | 创建数据库 | 使用 SQLiteOpenHelper 创建本地数据库 | 使用 MySQL 命令创建远程数据库 |
| 3 | 查询数据 | 使用 SQL 语句通过 JDBC 执行查询 | 在 Navicat 中编写查询或使用命令行 |
| 4 | 数据增删改 | 使用 ContentValues 和 SQL 语句 | 在 Navicat 中操作或使用命令行 |
| 5 | 开启远程连接 | 配置数据库和网络安全设置 | 修改 MySQL 配置文件并重启服务 |
| ... | ... | ... | ... |
以下是根据您提供的信息,补充完整的介绍内容:
| 序号 | 安卓端操作/设置 | Windows端操作/设置 | |
| 1 | 数据库连接 | 使用Class.forName("com.mysql.jdbc.Driver") 加载驱动,使用DriverManager.getConnection() 方法连接 |
在 Navicat 中配置服务器地址、端口、用户名和密码进行连接 |
| 2 | 创建数据库 | 通过继承SQLiteOpenHelper 类并在onCreate() 中编写创建表的 SQL 语句 |
使用 MySQL 命令如CREATE DATABASE 在命令行或 Navicat 中创建 |
| 3 | 查询数据 | 使用SQLiteDatabase.rawQuery() 或Cursor 进行查询 |
在 Navicat 中编写 SQL 查询或在命令行中使用SELECT 语句 |
| 4 | 数据增删改 | 通过ContentValues 和SQLiteDatabase.insert(),update(),delete() 进行操作 |
使用 SQL 语句INSERT,UPDATE,DELETE 在命令行或 Navicat 中操作 |
| 5 | 开启MySQL的远程连接 | 配置数据库允许远程访问,使用正确的 IP 地址和端口号 | 修改 MySQL 配置文件my.cnf,添加bindaddress = 0.0.0.0,重启 MySQL 服务 |
| 6 | 数据库安全配置 | 在 AndroidManifest.xml 中配置网络权限 |
通过防火墙设置和 MySQL 用户权限管理进行安全配置 |
请注意,在实际开发中,出于性能和安全性考虑,通常不建议在 Android 应用程序中直接连接远程 MySQL 数据库,而是通过后端服务进行数据交互。

(图片来源网络,侵删)