1. 开发环境
- 开发工具:Androidstudio
- 开发语言:Java
2.基本概念,SQLite是什么?
- SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持标准SQL语法,还遵循ACID(数据库事务)原则。简单粗暴的说,就是用来存储复杂类型数据的
3. 实现步骤
创建用户表
- 使用SQLite数据库,必须继承SQLiteOpenHelper
- 编写类名为UserDbHelper 继承SQLiteOpenHelper
public class UserDbHelper extends SQLiteOpenHelper {
private static UserDbHelper sHelper;
private static final String DB_NAME = "user_info.db"; //数据库名
private static final int VERSION = 1; //版本号
//必须实现其中一个构方法
public UserDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//创建单例,供使用调用该类里面的的增删改查的方法
public synchronized static UserDbHelper getInstance(Context context) {
if (null == sHelper) {
sHelper = new UserDbHelper(context, DB_NAME, null, VERSION);
}
return sHelper;
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建user_table表
db.execSQL("create table user_table(_id integer primary key autoincrement, " +
"username text," + //用户名
"password text," + //密码
"register_type integer" + // 注册类型 0---用户 1---管理员
")");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
//TODO 在这里根据自己的业务需求,编写增删改查的方法,如下所示
}
- 定义UserInfo数据模型(也叫实体)
建表中定义了什么样的信息字段,那么实体对象就应该定义有什么样的属性字段(保持一一对应的关系)
public class UserInfo {
private int _id;
private String username;
private String password;
private int register_type;
public static UserInfo sUserInfo;
public static UserInfo getUserInfo() {
return sUserInfo;
}
public static void setUserInfo(UserInfo userInfo) {
sUserInfo = userInfo;
}
public UserInfo(int _id, String username, String password, int register_type) {
this._id = _id;
this.username = username;
this.password = password;
this.register_type = register_type;
}
public int get_id() {
return _id;
}
public void set_id(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;
}
public int getRegister_type() {
return register_type;
}
public void setRegister_type(int register_type) {
this.register_type = register_type;
}
}
二. 编写增,删,改,查,的方法
- 注册
public int register(String username, String password, int register_type) {
//获取SQLiteDatabase实例
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
//填充占位符
values.put("username", username);
values.put("password", password);
values.put("register_type", register_type);
String nullColumnHack = "values(null,?,?,?)";
//执行
int insert = (int) db.insert("user_table", nullColumnHack, values);
db.close();
return insert;
}
- 登录
/**
* 登录 根据用户名查找用户
*/
@SuppressLint("Range")
public UserInfo login(String username) {
//获取SQLiteDatabase实例
SQLiteDatabase db = getReadableDatabase();
UserInfo userInfo = null;
String sql = "select _id,username,password,register_type from user_table where username=?";
String[] selectionArgs = {username};
Cursor cursor = db.rawQuery(sql, selectionArgs);
if (cursor.moveToNext()) {
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("username"));
String password = cursor.getString(cursor.getColumnIndex("password"));
int register_type = cursor.getInt(cursor.getColumnIndex("register_type"));
userInfo = new UserInfo(_id, name, password, register_type);
}
cursor.close();
db.close();
return userInfo;
}
2.1. 获取所有注册用户
/**
* 获取所有注册用户
*/
@SuppressLint("Range")
public List<UserInfo> queryRegisterListData() {
//获取SQLiteDatabase实例
SQLiteDatabase db = getReadableDatabase();
List<UserInfo> list = new ArrayList<>();
String sql = "select _id,username,password,register_type from user_table";
Cursor cursor = db.rawQuery(sql, null);
while (cursor.moveToNext()) {
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("username"));
String password = cursor.getString(cursor.getColumnIndex("password"));
int register_type = cursor.getInt(cursor.getColumnIndex("register_type"));
list.add(new UserInfo(_id, name, password, register_type));
}
cursor.close();
db.close();
return list;
}
- 修改
/**
* 根据用户唯一 _id来修改密码
*/
public int updatePwd(int _id, String password) {
//获取SQLiteDatabase实例
SQLiteDatabase db = getWritableDatabase();
// 填充占位符
ContentValues values = new ContentValues();
values.put("password", password);
// 执行SQL
int update = db.update("user_table", values, " _id=?", new String[]{_id+""});
// 关闭数据库连接
db.close();
return update;
}
- 删除
/**
* 根据用户 唯一_id删除用户
*/
public int delete(String _id) {
//获取SQLiteDatabase实例
SQLiteDatabase db = getWritableDatabase();
// 执行SQL
int delete = db.delete("user_table", " _id=?", new String[]{_id});
// 关闭数据库连接
db.close();
return delete;
}
三. 如何使用?
在UserDbHelper 类里面,提供了一个获取数据库实例的方法,叫getInstance(),这个方法的作用就是获取当前类的对象,从而调用该类里面定义的增,删,改,查的方法,
比如:用户注册调用如下:
int row = UserDbHelper.getInstance(this).register("浩宇软件开发", "123456", 0);
if (row > 0) {
showToast("注册成功");
} else {
showToast("注册失败");
}
row代表插入数据是否成功的状态,返回类型为Int类型。只要这个值大于0,就表示该条数据添加(插入)成功,否者就是失败
四. 如何批量插入数据
在Android开发中,使用Sqlite数据库是非常常见的。有时候,我们可能需要批量插入数据到数据库中,以提高效率和性能。本文将介绍如何通过使用事务来现这个目标。
public void insertByAll(List<CarInfo> list, String address, String mobile) {
//获取数据库实例
SQLiteDatabase db = getWritableDatabase();
//开始事务
db.beginTransaction();
try {
for (int i = 0; i < list.size(); i++) {
ContentValues values = new ContentValues();
values.put("username", list.get(i).getUsername());
values.put("product_img", list.get(i).getProduct_img());
values.put("product_title", list.get(i).getProduct_title());
values.put("product_price", list.get(i).getProduct_price());
values.put("product_count", list.get(i).getProduct_count());
values.put("address", address);
values.put("mobile", mobile);
db.insert("order_table", null, values);
}
//标记事物成功
db.setTransactionSuccessful();
} finally {
//结束事务
db.endTransaction();
}
//关闭数据库
db.close();
}