SQLite storage objects

Original address:  https://www.jianshu.com/p/6dc28d9ec8cc


foreword

The data types that sqliteDataBase can store are:
1.NULL: null value.
2.INTEGER: Signed integer, depending on the range of stored numbers.
3.REAL: floating point number, stored as 8-byte IEEE floating point number.
4.TEXT: String text.
5.BLOB: Binary object.

Let's use an example to talk about sqlite storage objects.

1. First throw a model, the class name is Person, and the code is as follows:
package com.example.pei.textdemo.sqlite;

import com.example.pei.textdemo.models.BaseModel;

/**
 * Title:
 * Description:
 * <p>
 * Created by pei
 * Date: 2017/11/16
 */
public class Person extends BaseModel {

    private String name;
    private String sex;
    private int age;

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

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

    public int getAge() {
        return age;
    }

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

This class is very simple. Note that Person needs to implement the Serializable interface to facilitate serialization. If you have any questions about the BaseModel in the above code, you can read my article SQLiteDatabase Learning (2) , which will not be introduced here.

2. Write the class ObjectOpenHelper that creates the database

ObjectOpenHelper needs to inherit SQLiteOpenHelper, and then when creating the data table person, Person will correspond to the data field in the table, and the data data type is BLOB. The specific code is as follows:

package com.example.pei.textdemo.sqlite_object;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Title:
 * Description:
 * <p>
 * Created by pei
 * Date: 2017/11/22
 */
public class ObjectOpenHelper extends SQLiteOpenHelper {

    private static final String DB_NAME = "save_object.db";//数据库文件名
    private static SQLiteDatabase INSTANCE;
    private Context mContext;

    public SQLiteDatabase getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new ObjectOpenHelper(mContext).getWritableDatabase();
        }
        return INSTANCE;
    }

    public ObjectOpenHelper(Context context) {
        this(context, DB_NAME, null, 1);
        this.mContext=context;
    }

    public ObjectOpenHelper(Context context, String dbName, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, dbName, factory, version);
    }

    //首次创建数据库时调用,一般进行建库建表操作
    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE IF NOT EXISTS person(_id integer NOT NULL PRIMARY KEY AUTOINCREMENT,\n" +
                "                                data BLOB);";
        //创建表
        db.execSQL(createTable);
    }

    //当数据库的版本发生变化的时候会自动执行,禁止人为调用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }


}

3. Write the abstract management class ObjectDBHepler of the database

code show as below:

package com.example.pei.textdemo.sqlite_object;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.pei.textdemo.app.AppContext;

import java.util.List;

/**
 * Title:
 * Description:
 * <p>
 * Created by pei
 * Date: 2017/11/22
 */
public abstract class ObjectDBHepler {

    protected ObjectOpenHelper mObjectOpenHelper;

    private ObjectOpenHelper getObjectDBHelper(){
        if(mObjectOpenHelper==null){
            mObjectOpenHelper=new ObjectOpenHelper(AppContext.getInstance());
        }
        return mObjectOpenHelper;
    }

    /**获取数据库对象**/
    protected SQLiteDatabase getDateBase(){
        return getObjectDBHelper().getInstance();
    }

    /**关闭数据库**/
    protected void closeDB(){
        SQLiteDatabase db = getDateBase();
        if(db!=null){
            db.close();
        }
    }

    /**
     * 判断表是否存在
     * @param tableName:表名
     * @return
     */
    protected boolean isTableExist(String tableName){
        Cursor cursor = getDateBase().rawQuery("select name from sqlite_master where type='table';", null);
        while(cursor.moveToNext()){
            //遍历出表名
            String name = cursor.getString(0);
            if(name.equals(tableName)){
                return true;
            }
        }
        return false;
    }

    /**查询**/
    protected abstract List<?> checkAll();
    /**添加**/
    protected abstract <T>void insertObject(T t);
    /**删除**/
    protected abstract void delete(Object obj);
    /**更新**/
    protected abstract void update(Object obj);

}

4. Realize the data addition, deletion, modification and query class ObjUserHelper, which needs to inherit ObjectDBHepler, and then will be called in the activity
package com.example.pei.textdemo.sqlite_object;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.pei.textdemo.sqlite.Person;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Title:
 * Description:
 * <p>
 * Created by pei
 * Date: 2017/11/22
 */
public class ObjUserHelper extends ObjectDBHepler{

    private ObjUserHelper() {
    }

    private static class Holder {
        private static ObjUserHelper instance = new ObjUserHelper();
    }

    public static ObjUserHelper getInstance() {
        return ObjUserHelper.Holder.instance;
    }

    @Override
    protected List<?> checkAll() {
        List<Person>list=new ArrayList<>();
        SQLiteDatabase database = getDateBase();
        Cursor cursor = database.rawQuery("select * from person", null);
        if (cursor != null) {
            while (cursor.moveToNext()) {
                byte data[] = cursor.getBlob(cursor.getColumnIndex("data"));
                ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(data);
                try {
                    ObjectInputStream inputStream = new ObjectInputStream(arrayInputStream);
                    Person person = (Person) inputStream.readObject();
                    inputStream.close();
                    arrayInputStream.close();
                    list.add(person);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            cursor.close();
        }
        return list;
    }

    @Override
    protected <T> void insertObject(T t) {
        Person person= (Person) t;
        ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(arrayOutputStream);
            objectOutputStream.writeObject(person);
            objectOutputStream.flush();
            byte data[] = arrayOutputStream.toByteArray();
            objectOutputStream.close();
            arrayOutputStream.close();
            SQLiteDatabase database = getDateBase();
            String sql="insert into person(data) values (?)";
            database.execSQL(sql,new Object[]{ data });
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    @Override
    protected void delete(Object obj) {

    }

    @Override
    protected void update(Object obj) {

    }
}

5. Calls in MainActivity
  Person p=new Person();
  p.setAge(25);
  p.setName("展昭");
  p.setSex("nan");

  ObjUserHelper.getInstance().insertObject(p);
  LogUtil.e(SqliteObjectActivity.class,"====save success====");

  List<Person>persons= (List<Person>) ObjUserHelper.getInstance().checkAll();
  if(persons.isEmpty()){
      LogUtil.e(SqliteObjectActivity.class,"=====persons is null=====");
  }else{
     for(Person pt:persons){
        LogUtil.e(SqliteObjectActivity.class,"=====pt=="+pt.objectToString(pt));
     }
   }

Finally, look at the results of the operation:


1.png

ok, that's all for sqlite, thank you.


 


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325551716&siteId=291194637