Android SQLite增删改查(java版)

一.创建用户表 作者:浩宇软件开发

  1. 使用SQLite数据库,必须继承SQLiteOpenHelper
  2. 编写类名为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 在这里根据自己的业务需求,编写增删改查的方法,如下所示
} 
  1. 定义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;
    }
} 

二. 编写增,删,改,查,的方法

  1. 注册
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;
    } 
  1. 登录

/**
 * 登录  根据用户名查找用户
 */
@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;
} 

  1. 修改

/**
 * 根据用户唯一 _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;

} 

  1. 删除

/**
 * 根据用户 唯一_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();

} 

猜你喜欢

转载自blog.csdn.net/jky_yihuangxing/article/details/134377824