这学期安卓开发课程的实验中有一个实现登录功能,我就想使用数据库登录,一开始使用的sql server但最后没有实现,我就改用mysql,一开始使用mysql8.0连接不上,重新安装mysql5.5后成功连接。

先看功能展示:

       

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Date;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button but_signup;//登录界面注册按钮private Button but_signin;//登录界面登录按钮private Button signup_zhuce;//注册界面注册按钮private EditText textName;//登录界面用户名private EditText passWord;//登录界面密码private EditText signup_name;//注册界面的姓名private EditText id_card;//注册的身份证号private EditText signup_username;//注册的用户名private EditText signup_password;//注册的密码private EditText signup_birthday;//注册用户的生日private EditText signup_phonenumber;//注册用户的电话Handler h = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);but_signup = findViewById(R.id.but_Signup);but_signup.setOnClickListener(MainActivity.this);but_signin = findViewById(R.id.but_Signin);but_signin.setOnClickListener(MainActivity.this);passWord = findViewById(R.id.passWord);textName = findViewById(R.id.textName);signup_username = findViewById(R.id.signup_username);signup_password = findViewById(R.id.signup_password);signup_name = findViewById(R.id.signup_name);signup_birthday = findViewById(R.id.signup_birthday);signup_phonenumber = findViewById(R.id.signup_phonenumber);id_card = findViewById(R.id.id_card);SharedPreferences sp = getSharedPreferences("login", Context.MODE_PRIVATE);textName.setText(sp.getString("username", null));passWord.setText(sp.getString("password", null));}@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.but_Signin:Log.e("lzx", "登录"  );new Thread(new Runnable() {@Overridepublic void run() {String n = textName.getText().toString().trim();String psw = passWord.getText().toString().trim();SharedPreferences sp = getSharedPreferences("login", Context.MODE_PRIVATE);sp.edit().putString("username", textName.getText().toString()).putString("password", passWord.getText().toString()).apply();if(n.equals("")||psw.equals("")){Looper.prepare();Toast toast = Toast.makeText(MainActivity.this,"内容不该为空!",Toast.LENGTH_SHORT);toast.show();Looper.loop();}UserDao ud = new UserDao();Boolean result = ud.login(n,psw);Looper.prepare();Toast toast;if(!result){toast = Toast.makeText(MainActivity.this, "用户名不存在或密码错误!", Toast.LENGTH_SHORT);toast.show();}else {toast = Toast.makeText(MainActivity.this, "登录成功!", Toast.LENGTH_SHORT);toast.show();Intent intent =new Intent(MainActivity.this,Function.class);startActivity(intent);finish();}Looper.loop();}}).start();break;case R.id.but_Signup:Intent intent = new Intent(MainActivity.this,Test.class);startActivity(intent);finish();Log.e("lzx", "注册" );break;}}public void Forget(View view) {Intent intent = new Intent(MainActivity.this,ForgetPassword.class);startActivity(intent);finish();}}

登录界面xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/teal_200"android:gravity="center_horizontal"android:text="登录"android:textSize="40sp"android:paddingBottom="15dp"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><EditTextandroid:id="@+id/textName"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入用户名"android:layout_marginLeft="30dp"android:layout_marginTop="40dp"android:layout_marginBottom="20dp"android:layout_marginRight="30dp"android:ems="20"android:paddingLeft="20dp"android:paddingRight="20dp"android:inputType="textPersonName"/><EditTextandroid:id="@+id/passWord"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入密码"android:layout_marginLeft="30dp"android:layout_marginTop="10dp"android:layout_marginRight="30dp"android:paddingLeft="20dp"android:ems="18"android:paddingRight="20dp"android:inputType="textPassword"/><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="忘记密码"android:gravity="right"android:layout_marginRight="30dp"android:onClick="Forget"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/but_Signin"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="40dp"android:layout_marginTop="20dp"android:layout_marginRight="40dp"android:background="@color/teal_200"android:text="登 录"android:textColor="@color/white"android:textSize="25sp" /><Buttonandroid:id="@+id/but_Signup"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="40dp"android:layout_marginRight="40dp"android:layout_marginTop="20dp"android:text="注 册"android:textSize="25sp"android:textColor="@color/teal_200"android:background="@color/white"/></LinearLayout></LinearLayout>

jdbc连接:

先导入mysql的jdbc包

实现jdbc连接:JdbcUtil.java

import java.sql.Connection;
import java.sql.DriverManager;
public class JdbcUtil {private static JdbcUtil instance;public static JdbcUtil getInstance(){if (instance ==null){instance = new JdbcUtil();}return instance;}public static Connection getConnection(String dbName, String name, String password) {try {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://ip:端口/"+dbName;return DriverManager.getConnection(url,name,password);} catch (Exception e) {e.printStackTrace();return null;}}
}

注册、登录和重置密码功能:

UserDao.java

import android.util.Log;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao {JdbcUtil jdbcUtil = JdbcUtil.getInstance();Connection connection = JdbcUtil.getConnection("数据库名","用户名","密码");/**  注册过程** */public boolean register(String username,String password,String idcard,String name,String birthday,String phonenumber){if(connection == null){Log.e("lzx", "无数据库连接" );return false;}else {String sql ="insert into user(account,password,idcard,name,birthday,phonenumber) values(?,?,?,?,?,?)";try {PreparedStatement pre = connection.prepareStatement(sql);pre.setString(1,username);pre.setString(2,password);pre.setString(3,idcard);pre.setString(4,name);pre.setString(5,birthday);pre.setString(6,phonenumber);return pre.execute();} catch (SQLException e) {return false;}finally {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}//登录过程public boolean login(String name,String password){if(connection == null){Log.e("lzx", "无数据库连接" );return false;}else {String sql = "select * from user where account = ? and password = ?";try {PreparedStatement pre = connection.prepareStatement(sql);pre.setString(1,name);pre.setString(2,password);ResultSet res = pre.executeQuery();boolean t = res.next();return t;} catch (SQLException e) {return false;}}}public boolean select(String username,String userid,String userpn) {if (connection == null) {Log.e("lzx", "无数据库连接");return false;} else {String sql = "select * from user where account = ? and idcard = ? and phonenumber = ?";try {PreparedStatement pre = connection.prepareStatement(sql);pre.setString(1, username);pre.setString(2, userid);pre.setString(3, userpn);ResultSet res = pre.executeQuery();boolean t = res.next();return t;} catch (SQLException e) {return false;}}}public boolean update(String username,String userid,String userpn,String mima){if (connection == null){Log.e("lzx", "无数据库连接");return false;}else{String sql = "update user set password = ? where account = ? and idcard = ? and phonenumber = ? ";try {PreparedStatement pre = connection.prepareStatement(sql);pre.setString(1, mima);pre.setString(2, username);pre.setString(3, userid);pre.setString(4, userpn);return pre.execute();} catch (SQLException e) {return false;}}}
}

注册页面:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><androidx.appcompat.widget.Toolbarandroid:layout_width="match_parent"android:layout_height="match_parent"app:title="注册个人信息"app:navigationIcon="@drawable/ic_baseline_arrow_back_24"app:titleTextColor="@color/white"android:background="@color/teal_200"android:onClick="BackBut"/><EditTextandroid:id="@+id/signup_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="姓名"android:layout_marginRight="40dp"android:layout_marginLeft="40dp"android:layout_marginTop="40dp"android:paddingRight="20dp"android:paddingLeft="20dp"android:inputType="text"/><EditTextandroid:id="@+id/id_card"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="身份证号"android:layout_marginRight="40dp"android:layout_marginLeft="40dp"android:layout_marginTop="40dp"android:paddingRight="20dp"android:paddingLeft="20dp"android:inputType="number"android:digits="0123456789xX"/><EditTextandroid:id="@+id/signup_username"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="用户名"android:layout_marginRight="40dp"android:layout_marginLeft="40dp"android:layout_marginTop="40dp"android:paddingRight="20dp"android:paddingLeft="20dp"android:inputType="textPersonName"/><EditTextandroid:id="@+id/signup_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="密码"android:layout_marginRight="40dp"android:layout_marginLeft="40dp"android:layout_marginTop="40dp"android:paddingRight="20dp"android:paddingLeft="20dp"android:inputType="text"/><EditTextandroid:id="@+id/signup_birthday"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="生日"android:layout_marginRight="40dp"android:layout_marginLeft="40dp"android:layout_marginTop="40dp"android:paddingRight="20dp"android:paddingLeft="20dp"android:inputType="datetime"/><EditTextandroid:id="@+id/signup_phonenumber"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="手机号"android:layout_marginRight="40dp"android:layout_marginLeft="40dp"android:layout_marginTop="40dp"android:paddingRight="20dp"android:paddingLeft="20dp"android:inputType="phone"/><Buttonandroid:id="@+id/signup_zhuce"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="40dp"android:layout_marginTop="30dp"android:layout_marginRight="40dp"android:layout_marginBottom="40dp"android:background="#F6F6F6"android:gravity="center"android:text="注册"android:onClick="onSignupClick"android:textColor="@color/teal_200"android:textSize="30sp" /></LinearLayout></ScrollView>

import android.content.Intent;
import android.os.Bundle;
import android.os.Looper;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;public class Test extends AppCompatActivity {private Button signup_zhuce;private EditText signup_name;//注册界面的姓名private EditText id_card;//注册的身份证号private EditText signup_username;//注册的用户名private EditText signup_password;//注册的密码private EditText signup_birthday;//注册用户的生日private EditText signup_phonenumber;//注册用户的电话@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.logup_item);signup_username = findViewById(R.id.signup_username);signup_password = findViewById(R.id.signup_password);signup_name = findViewById(R.id.signup_name);signup_birthday = findViewById(R.id.signup_birthday);signup_phonenumber = findViewById(R.id.signup_phonenumber);id_card = findViewById(R.id.id_card);signup_zhuce = findViewById(R.id.signup_zhuce);}public void onSignupClick(View view) {new Thread(new Runnable() {@Overridepublic void run() {String un = signup_username.getText().toString().trim();//usernameString psw = signup_password.getText().toString().trim();String n = signup_name.getText().toString().trim();String bir = signup_birthday.getText().toString().trim();String pn = signup_phonenumber.getText().toString().trim();//phonenumberString id = id_card.getText().toString().trim();if(un.equals("")||psw.equals("")||n.equals("")||bir.equals("")||pn.equals("")||id.equals("")){Looper.prepare();Toast toast = Toast.makeText(Test.this,"所有内容都不能为空!",Toast.LENGTH_SHORT);toast.show();Looper.loop();}UserDao ud = new UserDao();ud.register(un,psw,id,n,bir,pn);Looper.prepare();Toast toast1 = Toast.makeText(Test.this,"注册成功",Toast.LENGTH_SHORT);toast1.show();Intent intent = new Intent(Test.this,MainActivity.class);startActivity(intent);finish();Looper.loop();}}).start();Log.e("lzx", "注册成功" );
}public void BackBut(View view) {Intent intent = new Intent(Test.this,MainActivity.class);startActivity(intent);finish();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode == KeyEvent.KEYCODE_BACK){Intent intent = new Intent(Test.this,MainActivity.class);startActivity(intent);finish();return true;}return super.onKeyDown(keyCode, event);}
}

重置密码界面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"><androidx.appcompat.widget.Toolbarapp:navigationIcon="@drawable/ic_baseline_arrow_back_24"android:onClick="ForgetBack"android:layout_width="match_parent"android:layout_height="wrap_content"app:title="重置密码"app:titleTextColor="@color/white"android:background="@color/teal_700"tools:ignore="MissingConstraints" /><EditTextandroid:id="@+id/zhanghao"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入账号"android:layout_marginLeft="30dp"android:layout_marginTop="30dp"android:layout_marginRight="30dp"android:paddingLeft="20dp"android:paddingRight="20dp"android:inputType="textPersonName"/><EditTextandroid:id="@+id/shenfen"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入身份证号"android:layout_marginLeft="30dp"android:layout_marginTop="30dp"android:layout_marginRight="30dp"android:paddingLeft="20dp"android:paddingRight="20dp"android:inputType="number"/><EditTextandroid:id="@+id/shoujihao"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入您的手机号"android:layout_marginLeft="30dp"android:layout_marginTop="30dp"android:layout_marginRight="30dp"android:paddingLeft="20dp"android:paddingRight="20dp"android:inputType="number"/><EditTextandroid:id="@+id/mima"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入您修改的密码"android:layout_marginLeft="30dp"android:layout_marginTop="30dp"android:layout_marginRight="30dp"android:paddingLeft="20dp"android:paddingRight="20dp"android:inputType="text"/><Buttonandroid:onClick="Changepsw"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="30dp"android:layout_marginRight="30dp"android:layout_marginLeft="30dp"android:background="@color/white"android:text="确认修改"android:textSize="30sp"android:textColor="@color/teal_700"/>
</LinearLayout>
import android.content.Intent;
import android.os.Bundle;
import android.os.Looper;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;public class ForgetPassword extends AppCompatActivity {EditText zhanghao;EditText shenfen;EditText shoujihao;EditText mima;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.forgetpassword_item);zhanghao = findViewById(R.id.zhanghao);shenfen = findViewById(R.id.shenfen);shoujihao = findViewById(R.id.shoujihao);mima = findViewById(R.id.mima);}public void ForgetBack(View view) {Intent intent = new Intent(ForgetPassword.this,MainActivity.class);startActivity(intent);finish();}public void Changepsw(View view) {new Thread(new Runnable() {@Overridepublic void run() {String zh = zhanghao.getText().toString().trim();//usernameString sf= shenfen.getText().toString().trim();String sjh = shoujihao.getText().toString().trim();String mm = mima.getText().toString().trim();//phonenumberif(zh.equals("")||sf.equals("")||sjh.equals("")){Looper.prepare();Toast toast = Toast.makeText(ForgetPassword.this,"所有内容都不能为空!",Toast.LENGTH_SHORT);toast.show();Looper.loop();}UserDao ud = new UserDao();Boolean result = ud.select(zh,sf,sjh);Looper.prepare();if(result) {ud.update(zh,sf,sjh,mm);Toast toast = Toast.makeText(ForgetPassword.this, "更新成功!", Toast.LENGTH_SHORT);toast.show();Intent intent = new Intent(ForgetPassword.this, MainActivity.class);startActivity(intent);finish();Looper.loop();}else{Toast toast = Toast.makeText(ForgetPassword.this,"更新失败!信息填写错误!",Toast.LENGTH_SHORT);toast.show();Looper.loop();}}}).start();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode == KeyEvent.KEYCODE_BACK){Intent intent = new Intent(ForgetPassword.this,MainActivity.class);startActivity(intent);finish();return true;}return super.onKeyDown(keyCode, event);}
}

从登录界面跳转到注册界面和重置密码界面都会结束一个Activity的生命周期,任何写一个toolbar进行返回和对返回键进行监听,如果按下就跳转回登录界面。

AndroidManifest.xml里记得添加:

获得网络权限

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

最后登录功能完成,本人能力有限,大多为网络上教程整合,如有错误请指正,欢迎大家一起交流分享。

【android studio】安卓实现mysql数据库登录、注册、重置密码。相关推荐

  1. android studio使用Bmob来实现登录注册的功能

    刚刚抛下了Eclipse,初学了android studio,一开始真是用起来感觉难受,不过的确能够实现一些Eclipse不能实现的功能,而且用起来还蛮方便. 网上虽然有很多关于这等方面的教程,但是一 ...

  2. Android Studio开发:简单的登录注册界面

    Android开发:编写简单的登录界面与注册界面 1.登录界面布局 1.1主布局的布局方式是垂直布局,第一个TextView控件在顶部居中布置,显示"用户登录 "字样 <Te ...

  3. Android Studio初学者实例:SharedPreferences 登录/注册模块实现

    该实验是紧接上一期使用SP登录.记住密码的实验,主要实现是除了上次登陆以外,登录以后在主界面有一系列假数据,可以通过右上角进行排序选择,以下是实验效果: 示例:好友名排序效果 首先是登陆界面以及逻辑代 ...

  4. android servlet 登陆,Android Studio+Servlet+MySql实现登录注册

    一.Android 项目当中设置明文传输 1.设置明文传输的xml 2.引入上述创建的xml android:networkSecurityConfig="@xml/network_secu ...

  5. 任意电脑登录MySQL_使用批处理命令注册运行mysql数据库,无需注册mysql服务,可以在任意电脑登录使用...

    使用批处理命令初始化和开启mysql服务,移植数据库之后可以直接运行访问,对于学习数据库的人来说特别的方便哦. 我们可以从mysql官网下载官方社区版本的mysql: 这里使用之前下载的8.0.15来 ...

  6. Android Studio连接云服务器数据库

    Android Studio连接云服务器数据库 写在开始 1.Navicat连接云服务器数据库 2.MyEclipse开发服务端servlet的相关步骤 Android Studio端代码编写 写在开 ...

  7. Android Studio 连接阿里云数据库【制作基于数据库的多人远程聊天APP】

    Android Studio 连接阿里云数据库的简单方法[制作基于数据库的多人远程聊天APP] 首先购买好一个阿里云数据库RDS[我买了一年用了49元] 1.进入官网–>打开右上角的控制台 2. ...

  8. 安卓通过SQLite实现登录注册功能(小白式教程)

    安卓通过SQLlite实现登录注册功能 前面基本操作看图片 第一个xml文件是:round_bg.xml,后面界面布局要用到 <?xml version="1.0" enco ...

  9. Android+SpringBoot前后端分离实现登录注册

    Android+SpringBoot前后端分离实现登录注册 一.登录 1.界面设计 2.Android端 (1)布局文件(activity_login) (2)java文件(LoginActivity ...

最新文章

  1. python绘制三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图
  2. 消息中间件消费到的消息处理失败怎么办?
  3. yslow前端性能测试工具
  4. 从vmware技术团队跳槽到微软技术团队(comlan)
  5. gaia引擎分析(二)场景管理
  6. 恭喜 神策数据入选中国信通院开源供应商全景图
  7. ajax请求php的过程,php如何实现ajax请求
  8. 【C#/.NET】不用AutoMapper,我用啥呢?
  9. 吴恩达机器学习笔记四之正则化
  10. IT程序员在北京可以选择哪些国企、央企以及研究所?
  11. 备份数据库的expdp语句_Oracle数据库备份恢复Data Pump Expdp/Impdp参数详解与案例介绍...
  12. 1.node.js 概述
  13. 熊猫烧香病毒源码及分析
  14. AD9371+ZC706 NO-OS初始工程搭建-Vivado2019.2
  15. JavaScript语法引用数据类型之函数(Fuction)
  16. i3 7100黑苹果_苹果连发三款新品,售价更低!性能更强!| 数码
  17. java类与对象实验报告心得体会_java实习实训报告心得【三篇】
  18. UbuntuNAT内网穿透实现远程访问
  19. 字典(JSON)数据写入文件并换行,Python
  20. HBuilder 设置 主题 背景颜色

热门文章

  1. Matlab中关于数值积分及符号积分的讨论
  2. 数字图像处理学习笔记4第四章 图像变换 附实验
  3. 分布式内存网格Hazelcast源码导读
  4. js判断浏览器是否打开了控制台
  5. android4.2屏幕录像,android——使用自带录屏工具进行屏幕录像
  6. 【学习笔记之程序员】笔记
  7. 树莓派成功使用 TPLINK WDN5200H网卡( 芯片 rtl8821cu )
  8. linux大于3T硬盘多个分区,linux之Ubuntu挂载3T硬盘或大于2T磁盘
  9. 统计学习方法 - 绪论部分
  10. 杰里之104X之输出 3 路 PMW【篇】