Android 数据持久化之SQLite

Android 数据持久化之SQLite

SQLite是android系统自带的轻量级数据库,占用内存小,不用引用直接可以使用,是数据持久化在正式项目中的理想之选。本文主要简单的介绍如何在android使用SQLite数据库,包括数据库的创建与更新,以及如何新加已创建表字段和最简单的增删改查方法。至于其余的增删改查方法都是大同小异,真正的项目中是需要如事例中一样编写简单的sql语句的。

一、SQLite的使用方法

1.创建DBHelper来继承SQliteOpenHelper,并重写onCreate和onUpgrade两个方法。这个类的作用就是对数据库表进行创建和升级使用。
2.调用getWritableDatabase或者getReadableDatabase最后对数据库进行执行操作。

二、数据库的创建

1.创建DBHelper来继承SQliteOpenHelper,并实现构造方法
 public class DBHelper extends SQLiteOpenHelper{
    
        // 数据库 db 文件名称
        private static final String DEFAULT_NAME = "test.db";
        // 默认版本号
        private static final int DEFAULT_VERSION = 1;
    
        private Context mContext;
    
        public DBHelper(Context context) {
            super(context, DEFAULT_NAME, null, DEFAULT_VERSION, null);
            mContext = context;
        }
    
        /**
         * 数据表的创建
         * @param db
         */
        @Override
        public void onCreate(SQLiteDatabase db) {
    
        }
    
        /**
         * 数据库版本的更新
         * @param db
         * @param oldVersion
         * @param newVersion
         */
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
    }
2.在onCreate方法中编写建表语句
 /**
     * 数据表的创建
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        //此处把创建表的命令转换为String类型,id为主键自增长的int型数据
        //text代表文本类型,integer代表整型,real代表浮点类型,blob代表二进制类型
        final String create_person="create table Person ("
                + "id integer primary key autoincrement, "
                + "name text, "
                + "sex text, "
                + "age integer, "
                + "point real)";
        //执行建表语句
        db.execSQL(create_person);
        Toast.makeText(mContext,"人物表创建成功",Toast.LENGTH_SHORT).show();
    
    }
3.再创建一个数据库的管理类DBManager ,以后对数据表的增删改查都在这里实现。
 public class DBManager {
        private DBHelper dbHelper;
        private SQLiteDatabase database;
    
        public DBManager(Context context){
            dbHelper = new DBHelper(context);
            database = dbHelper.getWritableDatabase();
        }
    }
4.实现数据库表的创建,只要在对应的地方实现下列两行代码即可。
 private DBManager dbManager;
    dbManager = new DBManager(MainActivity.this);

三、数据库的更新

1.当onCreate已经执行一次后,在应用不卸载的情况下,如果我们要新增别的表,我们只能在onUpgrade中执行,并且把数据库版本增大,如原来是DEFAULT_VERSION=1,现在要改了DEFAULT_VERSION大于1即可,不然是不会执行成功的,除非卸载应用重新装
  /**
     * 数据库版本的更新
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        //当onCreate已经执行一次后,在应用不卸载的情况下,如果我们要新增别的表,我们只能在onUpgrade中执行,并且把数据库版本增大,如原来是DEFAULT_VERSION=1,现在要改了DEFAULT_VERSION大于1即可。
        final String create_student="create table Student ("
                + "id integer primary key autoincrement, "
                + "name text, "
                + "sex text, "
                + "age integer, "
                + "point real)";
    
        db.execSQL(create_student);
        Toast.makeText(mContext,"学生表创建成功",Toast.LENGTH_SHORT).show();
    }
2.更新已存在表的列,当表已经存在而我们需要为表添加一个新的字段,只能在onUpgrade中执行,而添加条件判断就意味着只有在老版本为特定版本的时候才会在Person 中添加新的列address,而别的版本不会去增加。
  if (oldVersion==2){
        final String AddCharColumn = "ALTER TABLE Person ADD COLUMN address text";
        db.execSQL(AddCharColumn);
    }

四、向数据表添加数据

1.首先根据创建Person实体类和数据库表Person对应
public class Person {
    private String name;
    private int age;
    private String sex;
    private float point;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public float getPoint() {
        return point;
    }

    public void setPoint(float point) {
        this.point = point;
    }
}
2.在DBManager中添加新增数据的方法addPersonData
 /**
     * 向人物表添加数据
     * @param person
     * @return
     */
    public boolean addPersonData(Person person){
        try {
            database.beginTransaction();
            final String sql = "INSERT INTO Person VALUES(NULL,?,?,?,?)";
            Object[] objects = new Object[]{
                    person.getName(),person.isSex(),person.getAge(),person.getPoint()
            };
            database.execSQL(sql,objects);
            database.setTransactionSuccessful();
        } catch (Exception e) {
            return false;
        } finally {
            if (database.inTransaction()) {
                database.endTransaction();
            }
        }
        return true;
    }
3.调用该方法
   Person person = new Person();
    person.setName("张三");
    person.setSex("男");
    person.setAge(15);
    person.setPoint(89);
    boolean success = dbManager.addPersonData(person);
    if (success){
        Toast.makeText(MainActivity.this,"添加成功",Toast.LENGTH_SHORT).show();
    }else {
        Toast.makeText(MainActivity.this,"添加失败",Toast.LENGTH_SHORT).show();
    }

五、更新表中已经存在的数据

1.在DBManager中添加更新数据的方法updatePersonData
  /**
     * 更新表中数据
     * @param person
     * @return
     */
    public boolean updatePersonData(Person person){
        try {
            ContentValues values = new ContentValues();
            values.put("sex", person.getSex());
            values.put("age", person.getAge());
            values.put("point", person.getPoint());
            database.beginTransaction();
            database.update("Person", values, "name=?", new String[]{person.getName()});
            database.setTransactionSuccessful();
        } catch (Exception e) {
            return false;
        } finally {
            if (database.inTransaction()) {
                database.endTransaction();
            }
        }
        return true;
        }
2.调用该方法
Person person = new Person();
person.setName("张三");
person.setAge(18);
boolean success = dbManager.updatePersonData(person);
if (success){
    Toast.makeText(MainActivity.this,"更新成功",Toast.LENGTH_SHORT).show();
}else {
    Toast.makeText(MainActivity.this,"更新失败",Toast.LENGTH_SHORT).show();
}
六、删除表中的数据
1.在DBManager中添加删除数据的方法delByName
  /**
     * 根据姓名删除Person中的数据
     * @param table 表名
     * @param whereClause 删除条件
     * @param parameter  参数
     * @return
     */
    public boolean delByName(String table, String whereClause, String[] parameter) {
        try {
            if (table != "" ) {
                database.beginTransaction();
                database.delete(table, whereClause, parameter);
                database.setTransactionSuccessful();
            }
        } catch (Exception e) {
            return false;
        } finally {
            if (database.inTransaction()) {
                database.endTransaction();
            }
        }
        return true;
    }
2.调用该方法
boolean successDel = dbManager.delByName("Person", "name=?", new String[]{"张三"});
if (successDel){
    Toast.makeText(MainActivity.this,"更新成功",Toast.LENGTH_SHORT).show();
}else {
    Toast.makeText(MainActivity.this,"更新失败",Toast.LENGTH_SHORT).show();
}

七、查询表中的数据

1.在DBManager中添加删除数据的方法getPersonByName
 /**
     * 根据名称查询
     * @param name
     * @return
     */
    public Person getPersonByName(String name) {
        Person person = new Person();
        try {
            String sql = "select * from Person where name=? ";
            Cursor cursor = database.rawQuery(sql, new String[]{name});
            while (cursor.moveToNext()) {
    
                person.setName(name);
                person.setSex(cursor.getString(cursor.getColumnIndex("sex")));
                person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
                person.setPoint(cursor.getFloat(cursor.getColumnIndex("point")));
            }
            cursor.close();
        } catch (Exception e) {
            Log.e("getChatUserById",e.toString());
        }
        return person;
    }
2.调用此方法
  Person personQuery = dbManager.getPersonByName("张三");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值