当前位置:   article > 正文

使用 Android Studio 通过 MySQL 数据库实现登录、注册和注销_android连接mysql实现登录注册

android连接mysql实现登录注册

引言

在 Android 应用程序中实现用户认证至关重要,因为它可以保护用户数据并提供个性化的体验。本文将指导你如何使用 Android Studio 通过 MySQL 数据库实现登录、注册和注销功能。

先决条件

  • 安装 Android Studio
  • 具有 MySQL 数据库的服务器
  • 了解 Java 和 XML

步骤 1:数据库连接

  1. 按下 Win+R 打开“运行”对话框。
  2. 输入 mysql -h localhost -u root -p,然后按 Enter。
  3. 系统会提示你输入密码。输入你设置的 MySQL root 用户密码。
  4. 登录成功后,输入以下命令更新用户权限:
  1. USE mysql;
  2. UPDATE user SET host = '%' WHERE user = 'root';
  3. FLUSH PRIVILEGES;

步骤 2:创建数据库和表及Android Studio 配置

在 Navicat 中创建数据库和表(如果没有连接)

步骤 1:连接到 MySQL 数据库服务器

  1. 打开 Navicat。
  2. 单击“连接”菜单,然后选择“MySQL”。
  3. 在“连接”对话框中,输入以下信息:
  • 连接名: 输入一个连接名称,以便以后轻松识别此连接。
  • 主机: 输入 MySQL 数据库服务器的地址或主机名。
  • 端口: 输入 MySQL 数据库服务器的端口号(通常为 3306)。
  • 用户名: 输入具有创建数据库和表权限的 MySQL 用户名。
  • 密码: 输入 MySQL 用户的密码。

        4.单击“测试连接”按钮以验证连接设置是否正确。

        5.单击“确定”保存连接。

步骤 2:创建数据库

  1. 在 Navicat 中,右键单击“数据库”节点,然后选择“新建数据库”。
  2. 在“数据库名称”字段中输入“login”。
  3. 单击“确定”创建数据库。

步骤 3:创建表

  1. 右键单击“login”数据库,然后选择“新建表”。
  2. 在“表名称”字段中输入“userinfo”。
  3. 在“字段”选项卡中,添加以下字段:
字段名数据类型
unameVARCHAR(20)
pswVARCHAR(20)

        4.单击“确定”创建表。

Android Studio 配置

  1. 在 Android Studio 中创建一个新项目。
  2. 在项目根目录下的 build.gradle 文件中添加 MySQL 依赖项:
  1. implementation("mysql:mysql-connector-java:5.1.47")

        3.在 AndroidManifest.xml 文件中添加 Internet 权限: 

<uses-permission android:name="android.permission.INTERNET" />

        4.创建 JdbcHelper.java 类,用于连接 MySQL 数据库。

  1. package com.example.myapplication;
  2. import com.mysql.jdbc.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.SQLException;
  5. public class jdbcHelper {
  6. // MySql数据库的MySQL 数据库的连接 URL,包括主机名、端口号和数据库名称。
  7. static String url = "jdbc:mysql://192.000.111.222:3306/login";
  8. // MySql数据库的用户名。
  9. static String name = "root";
  10. // MySQL 数据库的密码。
  11. static String psw = "123456";
  12. public static Connection getCon() {
  13. Connection con = null;
  14. try {
  15. // 加载 MySQL JDBC 驱动程序。
  16. Class.forName("com.mysql.jdbc.Driver");
  17. // 使用 DriverManager.getConnection 方法尝试建立与 MySQL 数据库的连接
  18. con = (Connection) DriverManager.getConnection(url,name,psw);
  19. } catch (ClassNotFoundException | SQLException e) {
  20. e.printStackTrace();
  21. }
  22. return con;
  23. }
  24. }

      要注意的是,192.000.111.222是你自己电脑的IP地址

步骤 3:登录界面

  1. 创建登录界面布局。
  2. 实现登录界面功能的代码,包括:
    • 从输入框中获取用户名和密码。
    • 连接到数据库并验证用户名和密码。
    • 显示登录成功或失败信息。

界面代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:padding="10dp">
  7. <TextView
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:textSize="18sp"
  11. android:text="登录"
  12. android:textStyle="bold"
  13. android:layout_gravity="center"></TextView>
  14. <EditText
  15. android:id="@+id/uname"
  16. android:layout_width="match_parent"
  17. android:layout_height="wrap_content"
  18. android:hint="请输入用户名"
  19. android:paddingLeft="10dp"></EditText>
  20. <EditText
  21. android:id="@+id/upsw"
  22. android:layout_width="match_parent"
  23. android:layout_height="wrap_content"
  24. android:hint="请输入密码"
  25. android:paddingLeft="10dp"></EditText>
  26. <Button
  27. android:id="@+id/login"
  28. android:layout_width="match_parent"
  29. android:layout_height="wrap_content"
  30. android:text="登录"></Button>
  31. <TextView
  32. android:id="@+id/zc"
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:text="注册"
  36. android:textSize="17sp"
  37. android:layout_gravity="center"></TextView>
  38. <TextView
  39. android:id="@+id/zx"
  40. android:layout_width="wrap_content"
  41. android:layout_height="wrap_content"
  42. android:text="注销"
  43. android:textSize="17sp"
  44. android:layout_gravity="center"></TextView>
  45. </LinearLayout>

功能代码:

  1. package com.example.myapplication;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.os.Looper;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.EditText;
  9. import android.widget.TextView;
  10. import android.widget.Toast;
  11. import com.mysql.jdbc.Connection;
  12. import com.mysql.jdbc.PreparedStatement;
  13. import java.sql.ResultSet;
  14. import java.sql.SQLException;
  15. public class MainActivity extends AppCompatActivity {
  16. EditText uname,upsw;
  17. TextView zc,zx;
  18. Button btn;
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_main);
  23. uname = findViewById(R.id.uname);
  24. upsw = findViewById(R.id.upsw);
  25. zc = findViewById(R.id.zc);
  26. zx = findViewById(R.id.zx);
  27. btn = findViewById(R.id.login);
  28. // 登录按钮点击事件
  29. btn.setOnClickListener(new View.OnClickListener() {
  30. @Override
  31. public void onClick(View v) {
  32. // 开启一个新线程来执行登录操作
  33. new Thread(new Runnable() {
  34. @Override
  35. public void run() {
  36. // 获取到 MySQL 数据库的连接
  37. Connection con = jdbcHelper.getCon();
  38. // 准备一个 SQL 查询语句来检查用户凭据
  39. String sqlStr = "select * from userinfo where uname=? and psw=?";
  40. try {
  41. // 创建一个 PreparedStatement 对象
  42. PreparedStatement ps = (PreparedStatement) con.prepareStatement(sqlStr);
  43. // 设置查询参数
  44. ps.setString(1,uname.getText().toString());
  45. ps.setString(2,upsw.getText().toString());
  46. // 进行查询
  47. ResultSet rs = ps.executeQuery();
  48. // 使用 Looper 来更新 UI
  49. Looper.prepare();
  50. // 判断查询结果是否存在
  51. if(rs.next()) {
  52. Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
  53. } else {
  54. Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();
  55. }
  56. // 结束 Looper
  57. Looper.loop();
  58. } catch (SQLException e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. }).start();
  63. }
  64. });
  65. // 跳转到注册页面按钮点击事件
  66. zc.setOnClickListener(new View.OnClickListener() {
  67. @Override
  68. public void onClick(View v) {
  69. Intent intent = new Intent(MainActivity.this,MainActivity2.class);
  70. startActivity(intent);
  71. }
  72. });
  73. // 跳转到注销页面按钮点击事件
  74. zx.setOnClickListener(new View.OnClickListener() {
  75. @Override
  76. public void onClick(View v) {
  77. Intent intent = new Intent(MainActivity.this,MainActivity3.class);
  78. startActivity(intent);
  79. }
  80. });
  81. }
  82. }

步骤 4:注册界面

  1. 创建注册界面布局。
  2. 实现注册界面功能的代码,包括:
    • 从输入框中获取用户名、密码和电子邮件地址。
    • 检查用户名是否存在。
    • 显示注册成功或失败信息。

界面代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:padding="10dp">
  7. <TextView
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:textSize="18sp"
  11. android:text="注册"
  12. android:textStyle="bold"
  13. android:layout_gravity="center"></TextView>
  14. <EditText
  15. android:id="@+id/uname"
  16. android:layout_width="match_parent"
  17. android:layout_height="wrap_content"
  18. android:hint="请输入用户名"
  19. android:paddingLeft="10dp"></EditText>
  20. <EditText
  21. android:id="@+id/upsw"
  22. android:layout_width="match_parent"
  23. android:layout_height="wrap_content"
  24. android:hint="请输入密码"
  25. android:paddingLeft="10dp"></EditText>
  26. <Button
  27. android:id="@+id/login"
  28. android:layout_width="match_parent"
  29. android:layout_height="wrap_content"
  30. android:text="注册"></Button>
  31. </LinearLayout>

功能代码:

  1. package com.example.myapplication;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.os.Looper;
  5. import android.view.View;
  6. import android.widget.Button;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9. import com.mysql.jdbc.PreparedStatement;
  10. import java.sql.Connection;
  11. import java.sql.ResultSet;
  12. import java.sql.SQLException;
  13. public class MainActivity2 extends AppCompatActivity {
  14. EditText uname,upsw;
  15. Button btn;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main2);
  20. uname = findViewById(R.id.uname);
  21. upsw = findViewById(R.id.upsw);
  22. btn = findViewById(R.id.login);
  23. // 注册按钮点击事件
  24. btn.setOnClickListener(new View.OnClickListener() {
  25. @Override
  26. public void onClick(View v) {
  27. // 开启一个新线程来执行注册操作
  28. new Thread(new Runnable() {
  29. @Override
  30. public void run() {
  31. // 获取到 MySQL 数据库的连接
  32. Connection con = jdbcHelper.getCon();
  33. // 准备一个 SQL 查询语句来检查用户凭据
  34. String sqlStr = "select * from userinfo where uname=?";
  35. try {
  36. // 创建一个 PreparedStatement 对象
  37. PreparedStatement ps = (PreparedStatement) con.prepareStatement(sqlStr);
  38. // 设置查询参数
  39. ps.setString(1,uname.getText().toString());
  40. // 进行查询
  41. ResultSet rs = ps.executeQuery();
  42. // 使用 Looper 来更新 UI
  43. Looper.prepare();
  44. // 判断查询结果是否存在
  45. if(rs.next()) {
  46. // 用户名已存在
  47. Toast.makeText(MainActivity2.this,"用户名已存在",Toast.LENGTH_SHORT).show();
  48. } else {
  49. // 注册
  50. String sqlStr1 = "insert into userinfo(uname,psw) values(?,?)";
  51. try {
  52. // 创建一个新的 PreparedStatement 对象
  53. PreparedStatement ps1 = (PreparedStatement) con.prepareStatement(sqlStr1);
  54. // 设置插入参数
  55. ps1.setString(1,uname.getText().toString());
  56. ps1.setString(2,upsw.getText().toString());
  57. // 执行插入操作
  58. int rows = ps1.executeUpdate();
  59. // 判断插入是否成功
  60. if(rows > 0) {
  61. // 更新 UI
  62. runOnUiThread(new Runnable() {
  63. @Override
  64. public void run() {
  65. Toast.makeText(MainActivity2.this,"注册成功",Toast.LENGTH_SHORT).show();
  66. }
  67. });
  68. }
  69. } catch (SQLException e) {
  70. e.printStackTrace();
  71. }
  72. }
  73. // 结束 Looper
  74. Looper.loop();
  75. } catch (SQLException e) {
  76. e.printStackTrace();
  77. }
  78. }
  79. }).start();
  80. }
  81. });
  82. }
  83. }

步骤 5:注销界面

  1. 创建注销界面布局。
  2. 实现注销界面功能的代码,包括:
    • 从输入框中获取用户名和密码。
    • 检查用户名和密码是否在数据库当中。
    • 显示注销成功或失败信息。

界面代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:padding="10dp">
  7. <TextView
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:textSize="18sp"
  11. android:text="注销"
  12. android:textStyle="bold"
  13. android:layout_gravity="center"></TextView>
  14. <EditText
  15. android:id="@+id/uname"
  16. android:layout_width="match_parent"
  17. android:layout_height="wrap_content"
  18. android:hint="请输入用户名"
  19. android:paddingLeft="10dp"></EditText>
  20. <EditText
  21. android:id="@+id/upsw"
  22. android:layout_width="match_parent"
  23. android:layout_height="wrap_content"
  24. android:hint="请输入密码"
  25. android:paddingLeft="10dp"></EditText>
  26. <Button
  27. android:id="@+id/login"
  28. android:layout_width="match_parent"
  29. android:layout_height="wrap_content"
  30. android:text="注销"></Button>
  31. </LinearLayout>

功能代码:

  1. package com.example.myapplication;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.os.Looper;
  5. import android.view.View;
  6. import android.widget.Button;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9. import com.mysql.jdbc.PreparedStatement;
  10. import java.sql.Connection;
  11. import java.sql.ResultSet;
  12. import java.sql.SQLException;
  13. public class MainActivity3 extends AppCompatActivity {
  14. EditText uname,upsw;
  15. Button btn;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main3);
  20. uname = findViewById(R.id.uname);
  21. upsw = findViewById(R.id.upsw);
  22. btn = findViewById(R.id.login);
  23. // 注销按钮点击事件
  24. btn.setOnClickListener(new View.OnClickListener() {
  25. @Override
  26. public void onClick(View v) {
  27. // 开启一个新线程来执行注销操作
  28. new Thread(new Runnable() {
  29. @Override
  30. public void run() {
  31. // 获取到 MySQL 数据库的连接
  32. Connection con = jdbcHelper.getCon();
  33. // 准备一个 SQL 查询语句来检查用户凭据
  34. String sqlStr = "select * from userinfo where uname=? and psw=?";
  35. try {
  36. // 创建一个 PreparedStatement 对象
  37. PreparedStatement ps = (PreparedStatement) con.prepareStatement(sqlStr);
  38. // 设置查询参数
  39. ps.setString(1,uname.getText().toString());
  40. ps.setString(2,upsw.getText().toString());
  41. // 进行查询
  42. ResultSet rs = ps.executeQuery();
  43. // 使用 Looper 来更新 UI
  44. Looper.prepare();
  45. // 判断查询结果是否存在
  46. if(rs.next()) {
  47. // 用户存在,执行注销操作
  48. String sqlStr1 = "delete from userinfo where uname=?";
  49. try {
  50. // 创建一个 PreparedStatement 对象来执行注销操作
  51. PreparedStatement ps1 = (PreparedStatement) con.prepareStatement(sqlStr1);
  52. // 设置注销参数
  53. ps1.setString(1,uname.getText().toString());
  54. // 执行注销操作
  55. int rows = ps1.executeUpdate();
  56. // 判断注销是否成功
  57. if(rows > 0) {
  58. // 注销成功,更新 UI
  59. runOnUiThread(new Runnable() {
  60. @Override
  61. public void run() {
  62. Toast.makeText(MainActivity3.this,"注销成功",Toast.LENGTH_SHORT).show();
  63. }
  64. });
  65. } else {
  66. // 注销失败,更新 UI
  67. runOnUiThread(new Runnable() {
  68. @Override
  69. public void run() {
  70. Toast.makeText(MainActivity3.this,"注销失败",Toast.LENGTH_SHORT).show();
  71. }
  72. });
  73. }
  74. } catch (SQLException e) {
  75. e.printStackTrace();
  76. }
  77. } else {
  78. // 用户不存在,更新 UI
  79. runOnUiThread(new Runnable() {
  80. @Override
  81. public void run() {
  82. Toast.makeText(MainActivity3.this,"用户名或密码错误",Toast.LENGTH_SHORT).show();
  83. }
  84. });
  85. }
  86. // 结束 Looper
  87. Looper.loop();
  88. } catch (SQLException e) {
  89. e.printStackTrace();
  90. }
  91. }
  92. }).start();
  93. }
  94. });
  95. }
  96. }

结论

通过遵循本文中的步骤,你可以使用 Android Studio 通过 MySQL 数据库实现登录、注册和注销功能。这将使你的应用程序更加安全、用户友好。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/677535
推荐阅读
相关标签
  

闽ICP备14008679号