安卓数据库sqlite增删查改—模拟用户登录与管理(2020-6-19)

安卓数据库sqlite增删查改—模拟用户登录与管理

创建数据库 :
1、openOrCreateDatabase();
2、继承SQLiteOpenHelper类
操作数据库:

插入:insert();
删除:delete();
修改:update();
查询:query();

具体看下面案例:模拟用户登录与管理
1、对用户账号进行注册(增)
2、对用户账号进行注销(删)
3、对用户账号进行登录(查)
4、对用户密码进行修改(改)

主页图与修改页面
安卓数据库sqlite增删查改—模拟用户登录与管理(2020-6-19)_第1张图片安卓数据库sqlite增删查改—模拟用户登录与管理(2020-6-19)_第2张图片
创建数据库与表,具体看代码详解 DB_test类

package com.example.test;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DB_test extends SQLiteOpenHelper {                //继承SQLiteOpenHelper类
   private final String CREATE_TABLE_SQL="create table tb_user(id integer,password)";//创建表语句,一旦创建列名等不可再修改!!如已经存在不会重复创建
   
    public DB_test(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { //构造方法 创建库,如已经存在不会重复创建
        super(context, "db_test1",null , 2);         //第一个参数为指定上下文对象,第二个参数为数据库名字,第三个写null就好,第四个版本号
    }


    //需要重写两个方法
    @Override
    public void onCreate(SQLiteDatabase db) {
           db.execSQL(CREATE_TABLE_SQL); //利用db.execSQL()方法,创建表
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {      //数据库版本更新情况

    }
}

具体操作类 分别给各按钮设置监听
增、删、查 具体看代码详解 MainActivity类

package com.example.test;

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.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
      Button login;
      Button logon;
      Button update;
      Button remove;
      EditText etext1;
      EditText etext2;
      DB_test dbtest;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        login=findViewById(R.id.login);          //登录按钮
        logon=findViewById(R.id.logon);          //注册按钮
        update=findViewById(R.id.update);       //修改密码
        remove=findViewById(R.id.remove);       //删除账号
        etext1=findViewById(R.id.edit_1);       //账号
        etext2=findViewById(R.id.edit_2);      //密码

        dbtest=new DB_test(MainActivity.this,"db_test1",null,2);    //刚刚创建的类

        //登录按钮注册监听
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db=dbtest.getReadableDatabase();
                String password = null;
                if(!etext1.getText().toString().trim().equals("")&&!etext2.getText().toString().trim().equals("")) {
                    Cursor cursor = db.query("tb_user", null, "id=?", new String[]{etext1.getText().toString()}, null, null, null);
                    // 按id查找   返回的结果用cursor保存 第一个参数为要查询的表,第二个参数为要查询的列查询所有的定为null,第三个指定查询条件
                    // 第四个参数指定第三个的值,后面的为排序,设置为空就好
                    while (cursor.moveToNext()) {
                        password = cursor.getString(1);        //索引从0开始 ,,故取第二个
                        cursor.close();
                    }

                    if (password != null && password.equals(etext2.getText().toString())) {   //在password不为空的条件下,判断password与输入密码框中的是否一致
                        Toast.makeText(MainActivity.this, "登录成功!", Toast.LENGTH_LONG).show();   //输出提示消息
                    } else Toast.makeText(MainActivity.this, "登录失败!", Toast.LENGTH_LONG).show();
                }
                else  Toast.makeText(MainActivity.this, "请正确输入!", Toast.LENGTH_LONG).show();
            }
        });

        //注册按钮注册监听
      logon.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              SQLiteDatabase db=dbtest.getWritableDatabase();
              ContentValues values=new ContentValues();         //用ContentValues类对象对 键与值保存  键要与表中对应的列名字相同 值就是赋给键的值
              if(!etext1.getText().toString().trim().equals("")&&!etext2.getText().toString().trim().equals("")) {
                  values.put("id", etext1.getText().toString());       // 从输入框中得到要注册的id
                  values.put("password", etext2.getText().toString());  // 从输入框中得到要注册的password

                  db.insert("tb_user", null, values);  //利用insert方法插入 第一个参数为表名,第二个参数设置空就好,第三个参数为ContentValues 对象
                  Toast.makeText(MainActivity.this, "注册成功!", Toast.LENGTH_LONG).show();
              }
              else  Toast.makeText(MainActivity.this, "请正确输入!", Toast.LENGTH_LONG).show();
          }
      });
      //修改按钮注册监听
        update.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Intent intent=new Intent(MainActivity.this,updateActivity.class); //跳过另一个Activity进行修改
              startActivity(intent);
          }
      });
        //删除按钮注册监听
        remove.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db=dbtest.getWritableDatabase();
                if(!etext1.getText().toString().trim().equals("")&&!etext2.getText().toString().trim().equals("")) {
                    int i = db.delete("tb_user", "id=? and password=?", new String[]{etext1.getText().toString(), etext2.getText().toString()});

                    //第一个参数为表名,第二个参数为删除的条件,第三个参数为String数组里的值对应第二个参数?中的值,
                    if (i == 1)
                        Toast.makeText(MainActivity.this, "删除成功!", Toast.LENGTH_LONG).show();
                }
                else  Toast.makeText(MainActivity.this, "请正确输入!", Toast.LENGTH_LONG).show();
            }
        });


    }
    //重写onDestroy() 方法 在程序关闭时,如果dbtest不为空,将他关闭
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(dbtest!=null){
            dbtest.close();
        }
    }
}

改 updateActivity类

package com.example.test;

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.Button;
import android.widget.EditText;
import android.widget.Toast;

public class updateActivity extends AppCompatActivity {
    Button sure;
    EditText etext1;
    EditText etext2;
    EditText etext3;
    DB_test dbtest;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.update);

        etext1=findViewById(R.id.edit_1);       //账号
        etext2=findViewById(R.id.edit_2);      //密码
        etext3=findViewById(R.id.edit_3);     //确认密码
        sure=findViewById(R.id.sure);        //修改按钮
        dbtest=new DB_test(updateActivity.this,"db_test1",null,1);

        sure.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //先查找出记录
                SQLiteDatabase db = dbtest.getReadableDatabase();
                String password = null;
                if (!etext1.getText().toString().trim().equals("")&&!etext2.getText().toString().trim().equals("") &&!etext3.getText().toString().trim().equals("")) {
                    Cursor cursor = db.query("tb_user", null, "id=?", new String[]{etext1.getText().toString()}, null, null, null);

                    //返回的结果用cursor保存 第一个参数为要查询的表,第二个参数为要查询的列查询所有的定为null,第三个指定查询条件,第四个参数指定第三个的值,后面的为排序,设置为空就好
                    while (cursor.moveToNext()) {
                        password = cursor.getString(1);
                        cursor.close();
                    }
                    if (password != null && password.equals(etext2.getText().toString())) {   //原理与注册按钮差不多
                        db = dbtest.getWritableDatabase();
                        ContentValues values = new ContentValues();
                        values.put("id", etext1.getText().toString());
                        values.put("password", etext3.getText().toString());  //将密码换成"确认密码"框中的值
                        db.update("tb_user", values, "id=?", new String[]{etext1.getText().toString()});
                        //第一个参数为表名,第二个参数为删除的条件,第三个参数为String数组里的值对应第二个参数?中的值,

                        Toast.makeText(updateActivity.this, "修改成功!", Toast.LENGTH_LONG).show();
                    } else
                        Toast.makeText(updateActivity.this, "密码错误!", Toast.LENGTH_LONG).show();
                }
                else  Toast.makeText(updateActivity.this, "请正确输入!", Toast.LENGTH_LONG).show();
            }

        });

    }
    //重写onDestroy() 方法 在程序关闭时,如果dbtest不为空,将他关闭
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(dbtest!=null){
            dbtest.close();
        }
    }
}

另附:最全3种安卓存储数据解析—SharedPreferenc存储(实现自动登录)+文件存储(模拟备忘录)+sqlite数据库(模拟用户登录与管理)

你可能感兴趣的:(Android,数据库,java,sql,android,android,studio)