创建数据库 :
1、openOrCreateDatabase();
2、继承SQLiteOpenHelper类
操作数据库:
插入:insert();
删除:delete();
修改:update();
查询:query();
具体看下面案例:模拟用户登录与管理
1、对用户账号进行注册(增)
2、对用户账号进行注销(删)
3、对用户账号进行登录(查)
4、对用户密码进行修改(改)
主页图与修改页面
创建数据库与表,具体看代码详解 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数据库(模拟用户登录与管理)