Android开发学习笔记整理(12)-SQLiteOpenHelper、SQLiteDatabase、execSQL和增删改查

SQLiteOpenHelper

作用:

用于管理数据库链接

两个方法:

  • (1) onCreate
  • (2) onUpgrade

SQLiteDatabase

作用:

相当于数据库/链接

分类:

ReadableDatabase、WritableDatabase

如何获取:

通过SQLiteOpenHeIper获取

execSQL

作用:

执行数据库语句

使用:

编写完整的SQL语句,然后执行

缺陷:

  • (1) 对于SQL语句要求高
  • (2) 没有返回值

insert、delete、update、 query

insert:

  • (1) insert参数的意义
  • (2) ContentValues
  • (3) insert翻译成SQL语句

delete:

  • (1) delete参数的意义
  • (2) delete翻译成SQL语句

update:

  • (1) update参数的意义
  • (2) update翻译成SQL语句

query:

  • (1) query参数的意义
  • (2) query翻译成SQL语句

保存密码进阶版

  • SharedPreferences自动保存密码的缺点
  • SQLite数据版本自动保存密码

SD卡文件操作

SD卡文件操作的实质:

使用流进行文件读写

权限申请:

  • (1) MOUNT_UNMOUNT_FILESYSTEMS:创建和删除文件权限
  • (2) WRITE_EXTERNAL_STORAGE
  • (3) READ_EXTERNAL_STORAGE

几个重要的方法:

  • (1) getExternaIStorageState:获取SD卡状态
  • (2) getRootDirectory:获取Android Root路径
  • (3) getDataDirectory:获取data目录
  • (4) getDownloadCacheDirectory:获取缓存目录

使用流完成读写操作

ContentProvider

什么是ContentProvider?

用于提供外部应用访问本应用数据库的接口

自定义ContentProvider

什么是ContentResolver?

用于访问其他应用程序数据的类

使用ContentResolver

代码部分:

part1:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="showSQLite"
        android:text="演示SQLite"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:onClick="showRememberPwd"
        android:text="演示记住密码功能"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button" />

</androidx.constraintlayout.widget.ConstraintLayout>

效果图:

在这里插入图片描述

activity_db_demo.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".DBDemoActivity">

    <EditText
        android:id="@+id/username"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginTop="100dp"
        android:ems="10"
        android:hint="请输入用户名"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/password"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:ems="10"
        android:hint="请输入密码"
        android:inputType="textPassword"
        app:layout_constraintEnd_toEndOf="@+id/username"
        app:layout_constraintStart_toStartOf="@+id/username"
        app:layout_constraintTop_toBottomOf="@+id/username" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:onClick="writeData"
        android:text="写入"
        app:layout_constraintStart_toStartOf="@+id/password"
        app:layout_constraintTop_toBottomOf="@+id/password" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="readData"
        android:text="读取"
        app:layout_constraintEnd_toEndOf="@+id/password"
        app:layout_constraintTop_toTopOf="@+id/button2" />

</androidx.constraintlayout.widget.ConstraintLayout>

效果图:

在这里插入图片描述

UserDBHelper.java

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class UserDBHelper extends SQLiteOpenHelper {

    //数据库版本号
    private static final int VERSION = 1;
    //数据库的名称
    public static  final String DB_NAME = "demo";

    /**
     * 简化后的DBHelper
     * @param context
     */
    public UserDBHelper(@Nullable Context context) {
        super(context, DB_NAME, null, VERSION);
    }

    /**
     * 构造方法
     * @param context 上下文
     * @param name 数据库的名字
     * @param factory 游标的创建方式,没有特殊要求,传null
     * @param version 创建时数据库的版本号,版本号只能往上升,不能往下降
     */
    public UserDBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    /**
     * 第一次初始化数据库时自动回调的函数,通常在这里会做一些数据库表的创建等
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建初始化的数据表
        String sql = "create table if not exists t_user(id integer primary key autoincrement, username varchar not null, password varchar not null)";
        db.execSQL(sql);
    }

    /**
     * 在数据库版本更新的时候自动回调的函数,通常在这里做一些更新数据库表的操作
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
    
}

User.java

public class User {

    private int id;

    private String username;

    private String password;

    public User(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
}

user_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView
        android:id="@+id/userId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />

    <TextView
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />

    <TextView
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />

    <Button
        android:id="@+id/deleteButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="删除" />

    <Button
        android:id="@+id/editButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="编辑" />
    
</LinearLayout>

效果图:

在这里插入图片描述

activity_user_list.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".UserListActivity">

    <ListView
        android:id="@+id/userList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    
</androidx.constraintlayout.widget.ConstraintLayout>

效果图:

在这里插入图片描述

activity_user_edit.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".UserEditActivity">

    <EditText
        android:id="@+id/username"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginTop="100dp"
        android:ems="10"
        android:hint="请输入用户名"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/password"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:ems="10"
        android:hint="请输入密码"
        android:inputType="textPassword"
        app:layout_constraintEnd_toEndOf="@+id/username"
        app:layout_constraintStart_toStartOf="@+id/username"
        app:layout_constraintTop_toBottomOf="@+id/username" />

    <Button
        android:id="@+id/saveButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="保存"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/password" />
    
</androidx.constraintlayout.widget.ConstraintLayout>

效果图:

在这里插入图片描述

UserEditActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class UserEditActivity extends AppCompatActivity {

    private EditText username;

    private EditText password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_edit);

        username = findViewById(R.id.username);
        password = findViewById(R.id.password);

        Intent intent = getIntent();
        String usernameString = intent.getStringExtra("username");
        String passwordString = intent.getStringExtra("password");
        final int id = intent.getIntExtra("id", 0);

        username.setText(usernameString);
        password.setText(passwordString);

        findViewById(R.id.saveButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 保存数据
                UserDBHelper userDBHelper = new UserDBHelper(UserEditActivity.this);
                SQLiteDatabase database = userDBHelper.getWritableDatabase();
                /*
                 * String table->表名
                 * ContentValues values->更新的字段
                 * String whereClause->where后面的条件
                 * String[] whereArgs->where后面的条件的参数
                 * */
                ContentValues contentValues = new ContentValues();
                contentValues.put("username", username.getText().toString());
                contentValues.put("password", password.getText().toString());
                database.update("t_user", contentValues, "id=?", new String[]{""+id});
                finish();
            }
        });
    }
    
}

UserAdapter.java

import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class UserAdapter extends BaseAdapter {

    private List<User> data;

    private Context context;

    private LayoutInflater inflater;

    public UserAdapter(List<User> data, Context context) {
        this.data = data;
        this.context = context;
        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.user_item, null);
            viewHolder = new ViewHolder();
            viewHolder.userId = convertView.findViewById(R.id.userId);
            viewHolder.username = convertView.findViewById(R.id.username);
            viewHolder.password = convertView.findViewById(R.id.password);
            viewHolder.button = convertView.findViewById(R.id.deleteButton);
            viewHolder.editButton = convertView.findViewById(R.id.editButton);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        final User user = data.get(position);
        viewHolder.userId.setText(user.getId()+"");
        viewHolder.username.setText(user.getUsername());
        viewHolder.password.setText(user.getPassword());

        //点击编辑按钮,跳转编辑界面
        viewHolder.editButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, UserEditActivity.class);
                intent.putExtra("id", user.getId());
                intent.putExtra("username", user.getUsername());
                intent.putExtra("password", user.getPassword());
                context.startActivity(intent);
            }
        });

        //给按钮绑定点击事件,用于删除信息
        viewHolder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                UserDBHelper userDBHelper = new UserDBHelper(context);
                SQLiteDatabase database = userDBHelper.getWritableDatabase();
                /*
                 * String table->表名
                 * String whereClause->where后面的条件,例如:delete from t_user where id=1,whereClause就是id=?
                 * String[] whereArgs->where语句的参数,例如:delete from t_user where id=1,whereArgs就是id=1的1
                 * */
                /*
                 * 数组的创建:
                 *   1.String[] demo = new String[10];
                 *   2.String[] demo = {"xx","xx"};
                 *   3.String[] demo = new String[]{"xx","xx"};
                 * */
                String id = user.getId()+"";
                database.delete("t_user","id=?", new String[]{id});
                Toast.makeText(context, "删除成功", Toast.LENGTH_SHORT).show();
            }
        });

        return convertView;
    }

    class ViewHolder{
        public TextView userId;
        public TextView username;
        public TextView password;
        public Button button;
        public Button editButton;
    }

}

UserListActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class UserListActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_list);

        // 初始化数据
        UserDBHelper userDBHelper = new UserDBHelper(this);
        SQLiteDatabase database = userDBHelper.getReadableDatabase();
        Cursor cursor = database.query("t_user",null,null,null,null,null,null);
        List<User> userList = new ArrayList<>();
        while(cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String username = cursor.getString(cursor.getColumnIndex("username"));
            String password = cursor.getString(cursor.getColumnIndex("password"));

            User user = new User(id,username,password);
            userList.add(user);
        }

        // 初始化ListView
        ListView listView = findViewById(R.id.userList);
        UserAdapter userAdapter = new UserAdapter(userList, this);
        listView.setAdapter(userAdapter);
    }

}

DBDemoActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class DBDemoActivity extends AppCompatActivity {

    //用户名
    private EditText username;
    //密码
    private EditText password;
    //数据库Helper
    private UserDBHelper userDBHelper;

    private static final String TAG = "DBDemoActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_db_demo);

        //初始化数据
        this.username = findViewById(R.id.username);
        this.password = findViewById(R.id.password);
        this.userDBHelper = new UserDBHelper(this);
    }

    /**
     * 写入数据
     * @param view
     */
    public void writeData(View view){
        //向t_user中写数据:1.创建一个t_user,2.执行SQL
//        userDBHelper.getReadableDatabase(); //获取读数据库的链接,在磁盘满的情况下,不会报错,只不过只能读取数据
//        userDBHelper.getWritableDatabase(); //获取写数据库的链接,在磁盘满的情况下,获取该链接会报错
        //获取SQLiteDatabase
        SQLiteDatabase sqLiteDatabase = userDBHelper.getWritableDatabase(); //第一次调用的时候,若没有数据库,则会创建数据库

        String username = this.username.getText().toString().trim();
        String password = this.password.getText().toString().trim();

        /*
         *  execSQL没有返回值,对于SQL语句掌握的比较好的话,可以直接手写SQL来执行
         *  insert有返回值,简化SQL语句的编写
         * */
//        String sql = "INSERT INTO t_user (username, PASSWORD) VALUES ('"+username+"','"+password+"')";
//        sqLiteDatabase.execSQL(sql);
        /*
         * String table -> 要插入的数据库表
         * String nullColumnHack -> 可以为空的字段名
         * ContentValues values -> 插入的数据,key:value,username:"张三"
         * */
        ContentValues contentValues = new ContentValues();
        contentValues.put("username", username); //key:字段名,value:值
        contentValues.put("password", password);
        long row = sqLiteDatabase.insert("t_user", null, contentValues);
        if (row != -1) {
            Toast.makeText(this, "插入数据成功", Toast.LENGTH_SHORT).show();
        }
        sqLiteDatabase.close();
    }

    /**
     * 读取数据
     * @param view
     */
    public void readData(View view) {

        //1.读取数据
        SQLiteDatabase database = userDBHelper.getReadableDatabase();
        /*
         * String table -> 表名
         * String[] columns -> 字段名,若为null,则查询所有的,即*
         * String selection -> where语句后面的条件,比如:SELECT * FROM t_user WHERE id = 1; selection就是id=?
         * String[] selectionArgs -> where条件的值,比如:SELECT * FROM t_user WHERE id = 1; selectionArgs就是new String[]{"1"}
         * String groupBy -> 分组,groupBy
         * String having -> having
         * String orderBy -> 排序
         *
         * */
        // select * from t_user
        Cursor cursor = database.query("t_user", null, null, null, null, null, null);

        List<User> userList = new ArrayList<>();
        while(cursor.moveToNext()) {
            int index = cursor.getColumnIndex("id");
            int id  = cursor.getInt(index);
            String username = cursor.getString(cursor.getColumnIndex("username"));
            String password = cursor.getString(cursor.getColumnIndex("password"));

            User user = new User(id, username, password);
            userList.add(user);
        }

        //2.跳转界面展示
        Intent intent = new Intent(this, UserListActivity.class);
//        intent.putExtra("userList", userList);
        startActivity(intent);
    }

}

效果图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

part2:

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * 用于演示SQLites数据库的使用
     * @param view
     */
    public void showSQLite(View view){
        Intent intent = new Intent(this, DBDemoActivity.class);
        startActivity(intent);
    }

    /**
     * 用于演示记住密码功能
     * @param view
     */
    public void showRememberPwd(View view) {
        Intent intent = new Intent(this, RememberPwdActivity.class);
        startActivity(intent);
    }

}

activity_remember_pwd.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".RememberPwdActivity">

    <EditText
        android:id="@+id/et_username"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginTop="100dp"
        android:ems="10"
        android:hint="请输入用户名"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/et_password"
        android:layout_width="300dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:ems="10"
        android:hint="请输入密码"
        android:inputType="textPassword"
        app:layout_constraintEnd_toEndOf="@+id/et_username"
        app:layout_constraintStart_toStartOf="@+id/et_username"
        app:layout_constraintTop_toBottomOf="@+id/et_username" />

    <CheckBox
        android:id="@+id/cb_remember"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:text="记住密码"
        app:layout_constraintStart_toStartOf="@+id/et_password"
        app:layout_constraintTop_toBottomOf="@+id/et_password" />

    <Button
        android:id="@+id/loginButton"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_marginTop="100dp"
        android:text="登录"
        app:layout_constraintEnd_toEndOf="@+id/et_password"
        app:layout_constraintStart_toStartOf="@+id/et_password"
        app:layout_constraintTop_toBottomOf="@+id/et_password" />

</androidx.constraintlayout.widget.ConstraintLayout>

效果图:

在这里插入图片描述

RememberPwdActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
public class RememberPwdActivity extends AppCompatActivity {

    private EditText et_username;
    private EditText et_password;
    private CheckBox cb_remember;
    private UserDBHelper userDBHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_remember_pwd);

        et_username = findViewById(R.id.et_username);
        et_password = findViewById(R.id.et_password);
        cb_remember = findViewById(R.id.cb_remember);
        userDBHelper = new UserDBHelper(this);

        //聚焦事件
        et_password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    String username = et_username.getText().toString().trim();
                    //查询数据库
                    SQLiteDatabase database = userDBHelper.getReadableDatabase();
                    Cursor cursor = database.query("t_user", null, "username=?", new String[]{username}, null,null,null);
                    User user = null;
                    while(cursor.moveToNext()) {
                        int id = cursor.getInt(cursor.getColumnIndex("id"));
                        String name = cursor.getString(cursor.getColumnIndex("username"));
                        String pwd = cursor.getString(cursor.getColumnIndex("password"));
                        user = new User(id, name, pwd);
                    }
                    if (user != null) {
                        //记住密码的用户,进行密码填充
                        et_password.setText(user.getPassword());
                        //勾选checkbox
                        cb_remember.setChecked(true);
                    } else {
                        et_password.setText("");
                        cb_remember.setChecked(false);
                    }
                    //关闭数据库连接
                    database.close();
                }
            }
        });

        //登录
        findViewById(R.id.loginButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //前提是登录成功了
                if (cb_remember.isChecked()) {
                    String username = et_username.getText().toString().trim();
                    //查询数据库
                    SQLiteDatabase database = userDBHelper.getReadableDatabase();
                    Cursor cursor = database.query("t_user", null, "username=?", new String[]{username}, null,null,null);
                    User user = null;
                    while(cursor.moveToNext()) {
                        int id = cursor.getInt(cursor.getColumnIndex("id"));
                        String name = cursor.getString(cursor.getColumnIndex("username"));
                        String pwd = cursor.getString(cursor.getColumnIndex("password"));
                        user = new User(id, name, pwd);
                    }
                    //以前就存在,做更新操作
                    if(user != null) {
                        ContentValues contentValues = new ContentValues();
                        contentValues.put("password", et_password.getText().toString().trim());
                        database.update("t_user",contentValues, "username=?", new String[]{username});
                    } else {
                        //以前不存在,插入操作
                        ContentValues contentValues = new ContentValues();
                        contentValues.put("username", username);
                        contentValues.put("password", et_password.getText().toString().trim());
                        database.insert("t_user", null, contentValues);
                    }

                    database.close();
                }
            }
        });

    }

    /*
     * 1.输入用户名,点击输入密码->查询数据库,查看是否记住了密码,若记住,则填充密码
     * 2.输入用户名,点击输入密码->查询数据库,查看是否记住了密码,若没记住,不做操作
     * 3.输入用户名、密码,勾选记住密码点击登录->登录成功,向数据库中存储密码
     * */

}

效果图:

在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章