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

这学期安卓开发课程的实验中有一个实现登录功能,我就想使用数据库登录,一开始使用的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;

    @Override
    protected 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));

    }


    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.but_Signin:
                Log.e("lzx", "登录"  );
                new Thread(new Runnable() {
                    @Override
                    public 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">
    <TextView
        android: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"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <EditText
            android: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"
            />
        <EditText
            android: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"
            />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="忘记密码"
            android:gravity="right"
            android:layout_marginRight="30dp"
            android:onClick="Forget"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >

        <Button
            android: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" />
        <Button
            android: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">

    <LinearLayout

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <androidx.appcompat.widget.Toolbar
            android: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"
            />
        <EditText
            android: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"
            />

        <EditText
            android: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"
            />

        <EditText
            android: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"
            />
        <EditText
            android: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"
            />
        <EditText
            android: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"
            />
        <EditText
            android: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"
            />
        
        <Button
            android: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;//注册用户的电话
    
    @Override
    protected 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() {
                    @Override
                    public void run() {

                        String un = signup_username.getText().toString().trim();//username
                        String 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();//phonenumber
                        String 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();
    }

    @Override
    public 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.Toolbar
        app: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" />
    <EditText
        android: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"
        />

    <EditText
        android: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"
        />
    <EditText
        android: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"
        />
    <EditText
        android: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"
        />
    <Button
        android: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;
    @Override
    protected 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() {
            @Override
            public void run() {
                String zh = zhanghao.getText().toString().trim();//username
                String sf= shenfen.getText().toString().trim();
                String sjh = shoujihao.getText().toString().trim();
                String mm = mima.getText().toString().trim();//phonenumber


                if(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();
    }

    @Override
    public 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" />

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

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鶕雀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值