Android 数据库框架ormlite 使用

ormlite是什么?

首先可以去它的官网看看www.ormlite.com,它的英文全称是Object Relational Mapping,意思是对象关系映射;如果接触过Java EE开发的,一定知道Java Web开发就有一个类似的数据库映射框架——Hibernate。简单来说,就是我们定义一个实体类,利用这个框架,它可以帮我们吧这个实体映射到我们的数据库中,在Android中是SQLite,数据中的字段就是我们定义实体的成员变量。

为什么要用ormlite?

先说说优点

  1. 轻量级
  2. 使用简单,易上手
  3. 封装完善
  4. 文档全面

缺点

  1. 基于反射,效率较低
  2. 缺少中文翻译文档

如何使用?

第一种使用方式

导入jar包到项目libs文件夹下

http://ormlite.com/releases/下载相应版本的jar,下载最新的,目前是最新版本4.49。我们下载稳定的4.48即可。

第二种使用方式

   implementation 'com.j256.ormlite:ormlite-android:5.0'
    implementation 'com.j256.ormlite:ormlite-core:5.0'

继承OrmLiteSqliteOpenHelper类定义数据库帮助类

package youli.com.example.administrator.myview;

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

import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
 * 数据库操作管理工具类
 * <p>
 * &#x6211;&#x4EEC;&#x9700;&#x8981;&#x81EA;&#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#x7C7B;&#x7EE7;&#x627F;&#x81EA;ORMlite&#x7ED9;&#x6211;&#x4EEC;&#x63D0;&#x4F9B;&#x7684;OrmLiteSqliteOpenHelper&#xFF0C;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#xFF0C;&#x91CD;&#x5199;&#x4E24;&#x4E2A;&#x65B9;&#x6CD5;onCreate()&#x548C;onUpgrade()
 * &#x5728;onCreate()&#x65B9;&#x6CD5;&#x4E2D;&#x4F7F;&#x7528;TableUtils&#x7C7B;&#x4E2D;&#x7684;createTable()&#x65B9;&#x6CD5;&#x521D;&#x59CB;&#x5316;&#x6570;&#x636E;&#x8868;
 * &#x5728;onUpgrade()&#x65B9;&#x6CD5;&#x4E2D;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5148;&#x5220;&#x9664;&#x6240;&#x6709;&#x8868;&#xFF0C;&#x7136;&#x540E;&#x8C03;&#x7528;onCreate()&#x65B9;&#x6CD5;&#x4E2D;&#x7684;&#x4EE3;&#x7801;&#x91CD;&#x65B0;&#x521B;&#x5EFA;&#x8868;
 * </p><p>
 * &#x6211;&#x4EEC;&#x9700;&#x8981;&#x5BF9;&#x8FD9;&#x4E2A;&#x7C7B;&#x8FDB;&#x884C;&#x5355;&#x4F8B;&#xFF0C;&#x4FDD;&#x8BC1;&#x6574;&#x4E2A;APP&#x4E2D;&#x53EA;&#x6709;&#x4E00;&#x4E2A;SQLite Connection&#x5BF9;&#x8C61;
 * </p><p>
 * &#x8FD9;&#x4E2A;&#x7C7B;&#x901A;&#x8FC7;&#x4E00;&#x4E2A;Map&#x96C6;&#x5408;&#x6765;&#x7BA1;&#x7406;APP&#x4E2D;&#x6240;&#x6709;&#x7684;DAO&#xFF0C;&#x53EA;&#x6709;&#x5F53;&#x7B2C;&#x4E00;&#x6B21;&#x8C03;&#x7528;&#x8FD9;&#x4E2A;DAO&#x7C7B;&#x65F6;&#x624D;&#x4F1A;&#x521B;&#x5EFA;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#xFF08;&#x5E76;&#x5B58;&#x5165;Map&#x96C6;&#x5408;&#x4E2D;&#xFF09;
 * &#x5176;&#x4ED6;&#x65F6;&#x5019;&#x90FD;&#x662F;&#x76F4;&#x63A5;&#x6839;&#x636E;&#x5B9E;&#x4F53;&#x7C7B;&#x7684;&#x8DEF;&#x5F84;&#x4ECE;Map&#x96C6;&#x5408;&#x4E2D;&#x53D6;&#x51FA;DAO&#x5BF9;&#x8C61;&#x76F4;&#x63A5;&#x8C03;&#x7528;
 */

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

    // &#x6570;&#x636E;&#x5E93;&#x540D;&#x79F0;
    public static final String DATABASE_NAME = "mydb.db";
    // &#x672C;&#x7C7B;&#x7684;&#x5355;&#x4F8B;&#x5B9E;&#x4F8B;
    private static DatabaseHelper instance;
    // &#x5B58;&#x50A8;APP&#x4E2D;&#x6240;&#x6709;&#x7684;DAO&#x5BF9;&#x8C61;&#x7684;Map&#x96C6;&#x5408;
    private Map<string, dao> daos = new HashMap<>();

    // &#x83B7;&#x53D6;&#x672C;&#x7C7B;&#x5355;&#x4F8B;&#x5BF9;&#x8C61;&#x7684;&#x65B9;&#x6CD5;
    public static synchronized DatabaseHelper getInstance(Context context) {
        if (instance == null) {
            synchronized (DatabaseHelper.class) {
                if (instance == null) {
                    instance = new DatabaseHelper(context);
                }
            }
        }
        return instance;
    }

    // &#x79C1;&#x6709;&#x7684;&#x6784;&#x9020;&#x65B9;&#x6CD5;
    private DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    public DatabaseHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory factory, int databaseVersion) {
        super(context, databaseName, factory, databaseVersion);
    }

    // &#x6839;&#x636E;&#x4F20;&#x5165;&#x7684;DAO&#x7684;&#x8DEF;&#x5F84;&#x83B7;&#x53D6;&#x5230;&#x8FD9;&#x4E2A;DAO&#x7684;&#x5355;&#x4F8B;&#x5BF9;&#x8C61;&#xFF08;&#x8981;&#x4E48;&#x4ECE;daos&#x8FD9;&#x4E2A;Map&#x4E2D;&#x83B7;&#x53D6;&#xFF0C;&#x8981;&#x4E48;&#x65B0;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x5E76;&#x5B58;&#x5165;daos&#xFF09;
    public synchronized Dao getDao(Class clazz) throws SQLException {
        Dao dao = null;
        String className = clazz.getSimpleName();
        if (daos.containsKey(className)) {
            dao = daos.get(className);
        }
        if (dao == null) {
            dao = super.getDao(clazz);
            daos.put(className, dao);
        }
        return dao;
    }

    @Override
    public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
        try {
            TableUtils.createTable(connectionSource, UserBean.class);
            TableUtils.createTable(connectionSource, ArticleBean.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
        try {
            TableUtils.dropTable(connectionSource, UserBean.class, true);  //&#x5220;&#x9664;&#x8868;&#x683C;
            TableUtils.dropTable(connectionSource, ArticleBean.class, true);
            onCreate(database, connectionSource);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // &#x91CA;&#x653E;&#x8D44;&#x6E90;
    @Override
    public void close() {
        super.close();
        for (String key : daos.keySet()) {
            Dao dao = daos.get(key);
            dao = null;
        }
    }

}
</string,></p>

定义实体类Bean,代表一张表

创建上面用到的Bean,在ormlite中,它代表数据库中的一张表,我们所定义的所有成员变量均可为表中的字段,只要我们按照它提供的注解方式来指定成员变量属性。

举个栗子:

UserBean:
package youli.com.example.administrator.myview;

import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;

import java.sql.Date;

/**
 * UserBean&#x5B9E;&#x4F53;&#x7C7B;&#xFF0C;&#x5B58;&#x50A8;&#x6570;&#x636E;&#x5E93;&#x4E2D;user&#x8868;&#x4E2D;&#x7684;&#x6570;&#x636E;
 * <p>
 * &#x6CE8;&#x89E3;&#xFF1A;
 * DatabaseTable&#xFF1A;&#x901A;&#x8FC7;&#x5176;&#x4E2D;&#x7684;tableName&#x5C5E;&#x6027;&#x6307;&#x5B9A;&#x6570;&#x636E;&#x5E93;&#x540D;&#x79F0;
 * DatabaseField&#xFF1A;&#x4EE3;&#x8868;&#x6570;&#x636E;&#x8868;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x5B57;&#x6BB5;
 * ForeignCollectionField&#xFF1A;&#x4E00;&#x5BF9;&#x591A;&#x5173;&#x8054;&#xFF0C;&#x8868;&#x793A;&#x4E00;&#x4E2A;UserBean&#x5173;&#x8054;&#x7740;&#x591A;&#x4E2A;ArticleBean&#xFF08;&#x5FC5;&#x987B;&#x4F7F;&#x7528;ForeignCollection&#x96C6;&#x5408;&#xFF09;
 * </p><p>
 * &#x5C5E;&#x6027;&#xFF1A;
 * id&#xFF1A;&#x5F53;&#x524D;&#x5B57;&#x6BB5;&#x662F;&#x4E0D;&#x662F;id&#x5B57;&#x6BB5;&#xFF08;&#x4E00;&#x4E2A;&#x5B9E;&#x4F53;&#x7C7B;&#x4E2D;&#x53EA;&#x80FD;&#x8BBE;&#x7F6E;&#x4E00;&#x4E2A;id&#x5B57;&#x6BB5;&#xFF09;
 * columnName&#xFF1A;&#x8868;&#x793A;&#x5F53;&#x524D;&#x5C5E;&#x6027;&#x5728;&#x8868;&#x4E2D;&#x4EE3;&#x8868;&#x54EA;&#x4E2A;&#x5B57;&#x6BB5;
 * generatedId&#xFF1A;&#x8BBE;&#x7F6E;&#x5C5E;&#x6027;&#x503C;&#x5728;&#x6570;&#x636E;&#x8868;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x662F;&#x5426;&#x81EA;&#x589E;
 * useGetSet&#xFF1A;&#x662F;&#x5426;&#x4F7F;&#x7528;Getter/Setter&#x65B9;&#x6CD5;&#x6765;&#x8BBF;&#x95EE;&#x8FD9;&#x4E2A;&#x5B57;&#x6BB5;
 * canBeNull&#xFF1A;&#x5B57;&#x6BB5;&#x662F;&#x5426;&#x53EF;&#x4EE5;&#x4E3A;&#x7A7A;&#xFF0C;&#x9ED8;&#x8BA4;&#x503C;&#x662F;true
 * unique&#xFF1A;&#x662F;&#x5426;&#x552F;&#x4E00;
 * defaultValue&#xFF1A;&#x8BBE;&#x7F6E;&#x8FD9;&#x4E2A;&#x5B57;&#x6BB5;&#x7684;&#x9ED8;&#x8BA4;&#x503C;
 */
@DatabaseTable(tableName = "user") // &#x6307;&#x5B9A;&#x6570;&#x636E;&#x8868;&#x7684;&#x540D;&#x79F0;
public class UserBean {
    // &#x5B9A;&#x4E49;&#x5B57;&#x6BB5;&#x5728;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x7684;&#x5B57;&#x6BB5;&#x540D;
    public static final String COLUMNNAME_ID = "id";
    public static final String COLUMNNAME_NAME = "name";
    public static final String COLUMNNAME_SEX = "sex";
    public static final String COLUMNNAME_BIRTHDAY = "birthday";
    public static final String COLUMNNAME_ADDRESS = "address";

    @DatabaseField(generatedId = true, columnName = COLUMNNAME_ID, useGetSet = true)
    private int id;
    @DatabaseField(columnName = COLUMNNAME_NAME, useGetSet = true, canBeNull = false, unique = true)
    private String name;
    @DatabaseField(columnName = COLUMNNAME_SEX, useGetSet = true, defaultValue = "1")
    private String sex;
    @DatabaseField(columnName = COLUMNNAME_BIRTHDAY, useGetSet = true)
    private String birthday;
    @DatabaseField(columnName = COLUMNNAME_ADDRESS, useGetSet = true)
    private String address;
    @ForeignCollectionField(eager = true)
    //ForeignCollectionField&#xFF1A;&#x4E00;&#x5BF9;&#x591A;&#x5173;&#x8054;&#xFF0C;&#x8868;&#x793A;&#x4E00;&#x4E2A;UserBean&#x5173;&#x8054;&#x7740;&#x591A;&#x4E2A;ArticleBean&#xFF08;&#x5FC5;&#x987B;&#x4F7F;&#x7528;ForeignCollection&#x96C6;&#x5408;&#xFF09;
    private ForeignCollection<articlebean> articles;

    public UserBean() {

    }

    public UserBean(String name, String sex, String birthday, String address) {
        this.name = name;
        this.sex = sex;
        this.birthday = birthday;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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 String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public ForeignCollection<articlebean> getArticles() {
        return articles;
    }

    public void setArticles(ForeignCollection<articlebean> articles) {
        this.articles = articles;
    }

    @Override
    public String toString() {
        return "UserBean{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex=" + sex +
                ", birthday=" + birthday +
                ", address='" + address + '\'' +
                ", articles=" + articles +
                '}';
    }

}
</articlebean></articlebean></articlebean></p>
ArticleBean:
package youli.com.example.administrator.myview;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

/**
 * ArticleBean&#x5B9E;&#x4F53;&#x7C7B;&#xFF0C;&#x5B58;&#x50A8;article&#x6570;&#x636E;&#x8868;&#x4E2D;&#x7684;&#x6570;&#x636E;
 * &#x6570;&#x636E;&#x5E93;&#x4E2D;&#x7684;article&#x8868;&#x548C;user&#x8868;&#x662F;&#x5173;&#x8054;&#x7684;&#xFF0C;&#x56E0;&#x6B64;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x5728;article&#x8868;&#x4E2D;&#x914D;&#x7F6E;&#x5916;&#x952E;
 * <p>
 * foreignColumnName&#xFF1A;&#x5916;&#x952E;&#x7EA6;&#x675F;&#x6307;&#x5411;&#x7684;&#x7C7B;&#x4E2D;&#x7684;&#x5C5E;&#x6027;&#x540D;
 * foreign&#xFF1A;&#x5F53;&#x524D;&#x5B57;&#x6BB5;&#x662F;&#x5426;&#x662F;&#x5916;&#x952E;
 * foreignAutoRefresh&#xFF1A;&#x5982;&#x679C;&#x8FD9;&#x4E2A;&#x5C5E;&#x6027;&#x8BBE;&#x7F6E;&#x4E3A;true&#xFF0C;&#x5728;&#x5173;&#x8054;&#x67E5;&#x8BE2;&#x7684;&#x65F6;&#x5019;&#x5C31;&#x4E0D;&#x9700;&#x8981;&#x518D;&#x8C03;&#x7528;refresh()&#x65B9;&#x6CD5;&#x4E86;
 */
@DatabaseTable(tableName = "article")
public class ArticleBean {
    // article&#x8868;&#x4E2D;&#x5404;&#x4E2A;&#x5B57;&#x6BB5;&#x7684;&#x540D;&#x79F0;
    public static final String COLUMNNAME_ID = "id";
    public static final String COLUMNNAME_TITLE = "title";
    public static final String COLUMNNAME_CONTENT = "content";
    public static final String COLUMNNAME_USER = "user_id";

    @DatabaseField(generatedId = true, columnName = COLUMNNAME_ID, useGetSet = true)
    private int id;
    @DatabaseField(columnName = COLUMNNAME_TITLE, useGetSet = true, canBeNull = false, unique = true)
    private String title;
    @DatabaseField(columnName = COLUMNNAME_CONTENT, useGetSet = true)
    private String content;
    @DatabaseField(columnName = COLUMNNAME_USER, foreign = true, foreignAutoRefresh = true, foreignAutoCreate = true, foreignColumnName = UserBean.COLUMNNAME_ID)
    private UserBean user_id;

    public ArticleBean() {
    }

    public ArticleBean(String title, String content, UserBean user) {
        this.title = title;
        this.content = content;
        this.user_id = user;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public UserBean getUser() {
        return user_id;
    }

    public void setUser(UserBean user) {
        this.user_id = user;
    }

    @Override
    public String toString() {
        return "ArticleBean{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", user=" + user_id +
                '}';
    }
}</p>

从两个实体类中的代码来看,ORMLite和JavaWeb框架中的Hibernate相似,都是使用注解的方式来标注数据库中的表、字段、关联关系的,这也是ORMLite的工作原理:ORMLite是基于反射机制工作的,然而这也成为了ORMLite的一个非常致命的缺点,性能不好。因此,如果是对想能要求不高的项目,我们可以考虑使用ORMLite,而如果项目对性能要求较高,我们可以考虑使用GreenDAO。

至于各个标签、各个属性的用途,将在本贴的最后贴出。

现在让我们再来看ORMLite中的另一个比较重要的东西——DAO。DAO是用来将操作某张表的方法(增、删、改、查)封装起来的工具类。下面来看代码:

UserDao:
package youli.com.example.administrator.myview;

import android.content.Context;

import com.j256.ormlite.dao.Dao;

import java.sql.SQLException;
import java.util.List;

public class UserDao {

    public static UserDao userDao;
    private Context context;
    // ORMLite&#x63D0;&#x4F9B;&#x7684;DAO&#x7C7B;&#x5BF9;&#x8C61;&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A;&#x6CDB;&#x578B;&#x662F;&#x8981;&#x64CD;&#x4F5C;&#x7684;&#x6570;&#x636E;&#x8868;&#x6620;&#x5C04;&#x6210;&#x7684;&#x5B9E;&#x4F53;&#x7C7B;&#xFF1B;&#x7B2C;&#x4E8C;&#x4E2A;&#x6CDB;&#x578B;&#x662F;&#x8FD9;&#x4E2A;&#x5B9E;&#x4F53;&#x7C7B;&#x4E2D;ID&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;
    private Dao<userbean, integer> dao;

    public static UserDao getInstance(Context context) {
        if (userDao == null) {
            userDao = new UserDao(context);
        }
        return userDao;

    }

    public UserDao(Context context) {
        this.context = context;
        try {
            this.dao = DatabaseHelper.getInstance(context).getDao(UserBean.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // &#x5411;user&#x8868;&#x4E2D;&#x6DFB;&#x52A0;&#x4E00;&#x6761;&#x6570;&#x636E;
    public void insert(UserBean data) {
        try {
            dao.create(data);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // &#x5220;&#x9664;user&#x8868;&#x4E2D;&#x7684;&#x4E00;&#x6761;&#x6570;&#x636E;
    public void delete(UserBean data) {
        try {
            dao.delete(data);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // &#x5220;&#x9664;&#x6307;&#x5B9A;id&#x9192;
    public void deleteById(int id) {
        try {
            dao.deleteById(id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // &#x4FEE;&#x6539;user&#x8868;&#x4E2D;&#x7684;&#x4E00;&#x6761;&#x6570;&#x636E;
    public void update(UserBean data) {
        try {
            dao.update(data);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // &#x67E5;&#x8BE2;user&#x8868;&#x4E2D;&#x7684;&#x6240;&#x6709;&#x6570;&#x636E;
    public List<userbean> selectAll() {
        List<userbean> users = null;
        try {
            users = dao.queryForAll();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return users;
    }

    // &#x6839;&#x636E;ID&#x53D6;&#x51FA;&#x7528;&#x6237;&#x4FE1;&#x606F;
    public UserBean queryById(int id) {
        UserBean user = null;
        try {
            user = dao.queryForId(id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return user;
    }

    // &#x6839;&#x636E;&#x5173;&#x952E;&#x5B57;&#x67E5;&#x8BE2;&#x7528;&#x6237;&#x4FE1;&#x606F;
    public List<userbean> querys(String key, String Value) {
        List<userbean> users = null;
        try {
            users = dao.queryForEq(key, Value);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return users;
    }
}
</userbean></userbean></userbean></userbean></userbean,>
ArticleDao:
package youli.com.example.administrator.myview;

import android.content.Context;

import com.j256.ormlite.dao.Dao;

import java.sql.SQLException;
import java.util.List;

/**
 * &#x64CD;&#x4F5C;article&#x8868;&#x7684;DAO&#x7C7B;
 */
public class ArticleDao {

    private Context context;

    private  static ArticleDao articleDao;

    // ORMLite&#x63D0;&#x4F9B;&#x7684;DAO&#x7C7B;&#x5BF9;&#x8C61;&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A;&#x6CDB;&#x578B;&#x662F;&#x8981;&#x64CD;&#x4F5C;&#x7684;&#x6570;&#x636E;&#x8868;&#x6620;&#x5C04;&#x6210;&#x7684;&#x5B9E;&#x4F53;&#x7C7B;&#xFF1B;&#x7B2C;&#x4E8C;&#x4E2A;&#x6CDB;&#x578B;&#x662F;&#x8FD9;&#x4E2A;&#x5B9E;&#x4F53;&#x7C7B;&#x4E2D;ID&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;
    private Dao<articlebean, integer> dao;

    public static ArticleDao getInstance(Context context) {
        if (articleDao == null) {
            articleDao = new ArticleDao(context);
        }
        return articleDao;
    }

    public ArticleDao(Context context) {
        this.context = context;
        try {
            this.dao = DatabaseHelper.getInstance(context).getDao(ArticleBean.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // &#x6DFB;&#x52A0;&#x6570;&#x636E;
    public void insert(ArticleBean data) {
        try {
            dao.create(data);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // &#x5220;&#x9664;&#x6570;&#x636E;
    public void delete(ArticleBean data) {
        try {
            dao.delete(data);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // &#x4FEE;&#x6539;&#x6570;&#x636E;
    public void update(ArticleBean data) {
        try {
            dao.update(data);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // &#x901A;&#x8FC7;ID&#x67E5;&#x8BE2;&#x4E00;&#x6761;&#x6570;&#x636E;
    public ArticleBean queryById(int id) {
        ArticleBean article = null;
        try {
            article = dao.queryForId(id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return article;
    }

    // &#x901A;&#x8FC7;&#x6761;&#x4EF6;&#x67E5;&#x8BE2;&#x6587;&#x7AE0;&#x96C6;&#x5408;&#xFF08;&#x901A;&#x8FC7;&#x7528;&#x6237;ID&#x67E5;&#x627E;&#xFF09;
    public List<articlebean> queryByUserId(int user_id) {
        try {
            return dao.queryBuilder().where().eq(ArticleBean.COLUMNNAME_USER, user_id).query();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

}
</articlebean></articlebean,>

最后就是测试代码了。我们直接在MainActivity中写代码,然后运行看结果。在MainActivity中,我们首先创建两张表并向表中添加数据,然后从数据表中分别取出数据,展示到TextView中。代码如下:

layout:

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" tools:context=".MainActivity">

    <linearlayout android:layout_width="match_parent" android:gravity="center" android:layout_height="wrap_content" android:orientation="horizontal">

        <button android:id="@+id/btn1" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="&#x6DFB;&#x52A0;&#x7528;&#x6237;">

        </button><button android:id="@+id/btn1_1" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="&#x6DFB;&#x52A0;&#x6587;&#x7AE0;">

        </button><button android:id="@+id/btn2" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="&#x67E5;&#x8BE2;">

        </button><button android:id="@+id/btn3" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="&#x5220;&#x9664;">

        </button><button android:id="@+id/btn4" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="&#x4FEE;&#x6539;">
    </button></linearlayout>

    <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margintop="10dp" android:orientation="horizontal">

        <edittext android:id="@+id/edit1" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_margin="2dp" android:gravity="center" android:hint="&#x59D3;&#x540D;" android:text="&#x674E;&#x767D;" android:textsize="16dp">

        <edittext android:id="@+id/edit2" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_margin="2dp" android:gravity="center" android:hint="&#x6027;&#x522B;" android:text="&#x7537;" android:textsize="16dp">

        <edittext android:id="@+id/edit3" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_margin="2dp" android:gravity="center" android:hint="&#x751F;&#x65E5;" android:text="1996-02-02" android:textsize="16dp">

        <edittext android:id="@+id/edit4" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_margin="2dp" android:gravity="center" android:hint="&#x4F4F;&#x5740;" android:text="&#x5317;&#x4EAC;" android:textsize="16dp">
    </edittext></edittext></edittext></edittext></linearlayout>

    <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margintop="10dp" android:orientation="horizontal">

        <edittext android:id="@+id/edit5" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_margin="2dp" android:gravity="center" android:hint="&#x6807;&#x9898;" android:text="&#x671B;&#x76F8;&#x601D;" android:textsize="16dp">

        <edittext android:id="@+id/edit6" android:layout_width="0dp" android:layout_weight="3" android:layout_height="wrap_content" android:layout_margin="2dp" android:gravity="center" android:hint="&#x5185;&#x5BB9;" android:text="&#x5E8A;&#x524D;&#x660E;&#x6708;&#x5149;" android:textsize="16dp">

    </edittext></edittext></linearlayout>

    <linearlayout android:layout_width="match_parent" android:layout_height="match_parent">
        <scrollview android:layout_width="match_parent" android:layout_height="match_parent">

            <textview android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="2dp" android:gravity="center" android:textsize="16dp">

        </textview></scrollview>
    </linearlayout>
</linearlayout>
MainActivity:
package youli.com.example.administrator.myview;

import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.stmt.DeleteBuilder;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText mEdit1;
    private EditText mEdit2;
    private EditText mEdit3;
    private EditText mEdit4;
    private EditText mEdit5;
    private EditText mEdit6;
    private Button mBtn1;
    private Button btn1_1;
    private Button mBtn2;
    private Button mBtn3;
    private Button mBtn4;

    private TextView text1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        mEdit1 = (EditText) findViewById(R.id.edit1);
        mEdit2 = (EditText) findViewById(R.id.edit2);
        mEdit3 = (EditText) findViewById(R.id.edit3);
        mEdit4 = (EditText) findViewById(R.id.edit4);
        mEdit5 = (EditText) findViewById(R.id.edit5);
        mEdit6 = (EditText) findViewById(R.id.edit6);
        mBtn1 = (Button) findViewById(R.id.btn1);
        btn1_1 = (Button) findViewById(R.id.btn1_1);
        mBtn2 = (Button) findViewById(R.id.btn2);
        mBtn3 = (Button) findViewById(R.id.btn3);
        mBtn4 = (Button) findViewById(R.id.btn4);
        text1 = (TextView) findViewById(R.id.text1);
        btn1_1.setOnClickListener(this);
        mBtn1.setOnClickListener(this);
        mBtn2.setOnClickListener(this);
        mBtn3.setOnClickListener(this);
        mBtn4.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1:     //&#x65B0;&#x589E;&#x7528;&#x6237;
                getInsert();
                break;
            case R.id.btn1_1:   //&#x65B0;&#x589E;&#x6587;&#x7AE0;
                getInsert_wz();
                getInsert_wz1();
                break;
            case R.id.btn2:     //&#x67E5;&#x8BE2;
//                getQuery();
                getQuery1();
                break;
            case R.id.btn3:    //&#x5220;&#x9664;
                getDelete();
                break;
            case R.id.btn4:    //&#x4FEE;&#x6539;
                getUpdate();
                break;
        }
    }

    private void getInsert() {  //&#x65B0;&#x589E;&#x7528;&#x6237;
        String name = mEdit1.getText().toString().trim();
        String sex = mEdit2.getText().toString().trim();
        String birthday = mEdit3.getText().toString().trim();
        String address = mEdit4.getText().toString().trim();
        UserBean userData = new UserBean(name, sex, birthday, address);   // &#x6DFB;&#x52A0;&#x7528;&#x6237;&#x6570;&#x636E;
        UserDao.getInstance(MainActivity.this).insert(userData);
    }

    private void getInsert_wz() {  //&#x65B0;&#x589E;&#x6587;&#x7AE0;
        String title = mEdit5.getText().toString().trim();
        String content = mEdit6.getText().toString().trim();
        UserBean userData = UserDao.getInstance(MainActivity.this).queryById(12);
        ArticleBean articleData = new ArticleBean(title, content, userData);    // &#x6DFB;&#x52A0;&#x6587;&#x7AE0;&#x6570;&#x636E;
        ArticleDao.getInstance(MainActivity.this).insert(articleData);
    }

    private void getInsert_wz1() {  //&#x65B0;&#x589E;&#x6587;&#x7AE0;
        String title = mEdit5.getText().toString().trim();
        String content = mEdit6.getText().toString().trim();
        List<userbean> list = UserDao.getInstance(MainActivity.this).querys("name", "&#x674E;&#x4E09;&#x601D;"); //&#x552F;&#x4E00;&#x503C;  &#x53EA;&#x6709;&#x4E00;&#x6761;
        ArticleBean articleData = new ArticleBean(title, content, list.get(0));    // &#x6DFB;&#x52A0;&#x6587;&#x7AE0;&#x6570;&#x636E;
        ArticleDao.getInstance(MainActivity.this).insert(articleData);
    }

    /**
     * &#x6839;&#x636E;&#x6587;&#x7AE0;&#x67E5;&#x8BE2; &#x5173;&#x8054;&#x4EBA;&#x7684;&#x4FE1;&#x606F;
     */
    private void getQuery() {
        StringBuffer contentBuffer = new StringBuffer();
        ArticleBean articleBean = new ArticleDao(MainActivity.this).queryById(1); // &#x4ECE;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x6839;&#x636E;ID&#x53D6;&#x51FA;&#x6587;&#x7AE0;&#x4FE1;&#x606F;
        contentBuffer.append(articleBean.toString());
        List<userbean> list = UserDao.getInstance(MainActivity.this).selectAll();     //&#x6839;&#x636E;&#x53D6;&#x51FA;&#x7684;&#x7528;&#x6237;id&#x67E5;&#x8BE2;&#x7528;&#x6237;&#x4FE1;&#x606F;
        if (list == null || list.size() < 0) {
            return;
        }

        UserBean userBean = new UserDao(MainActivity.this).queryById(6);        // &#x4ECE;&#x7528;&#x6237;&#x4FE1;&#x606F;&#x4E2D;&#x53D6;&#x51FA;&#x5173;&#x8054;&#x7684;&#x6587;&#x7AE0;&#x5217;&#x8868;&#x4FE1;&#x606F;
        ForeignCollection<articlebean> articles = userBean.getArticles();
        Iterator<articlebean> iterator = articles.iterator();
        while (iterator.hasNext()) {
            ArticleBean article = iterator.next();
            contentBuffer.append(article.toString() + "\n");
        }
        text1.setText(contentBuffer.toString());   // &#x8BBE;&#x7F6E;TextView&#x7684;&#x6587;&#x672C;
    }

    /**
     * &#x5173;&#x952E;&#x5B57;&#x67E5;&#x8BE2;&#x8DDF;&#x4EBA;&#x4FE1;&#x606F; &#x4E0E; &#x5173;&#x8054;&#x7684;&#x6587;&#x7AE0;
     */
    private void getQuery1() {

        StringBuffer contentBuffer = new StringBuffer();
        List<userbean> list = UserDao.getInstance(MainActivity.this).querys("name", "&#x674E;&#x4E09;&#x601D;");

        for (int i = 0; i < list.size(); i++) {

            ForeignCollection<articlebean> articles = list.get(i).getArticles();
            Iterator<articlebean> iterator = articles.iterator();
            while (iterator.hasNext()) {
                ArticleBean article = iterator.next();
                contentBuffer.append(article.toString() + "\n");
            }
        }
        // &#x8BBE;&#x7F6E;TextView&#x7684;&#x6587;&#x672C;
        text1.setText(contentBuffer.toString());
    }

    private void getDelete() {

        //&#x67E5;&#x8BE2;&#x7528;&#x6237;
        List<userbean> list = UserDao.getInstance(MainActivity.this).querys("name", "&#x674E;&#x4E09;&#x601D;");

        //&#x5220;&#x9664;&#x7528;&#x6237;&#x5173;&#x8054;&#x7684;&#x6587;&#x7AE0;
        for (int i = 0; i < list.size(); i++) {
            ForeignCollection<articlebean> articles = list.get(i).getArticles();
            Iterator<articlebean> iterator = articles.iterator();
            while (iterator.hasNext()) {
                ArticleBean article = iterator.next();
                ArticleDao.getInstance(this).delete(article);//&#x5220;&#x9664;
            }
        }

        //&#x5220;&#x9664;&#x7528;&#x6237;
        UserBean userBean = new UserBean();
        userBean.setId(7);
        UserDao.getInstance(MainActivity.this).delete(userBean);

    }

    private void getUpdate() {
        UserBean userBean = new UserBean();
        userBean.setId(5);
        userBean.setName("&#x674E;&#x4E09;&#x601D;");
        userBean.setSex("&#x5973;");
        userBean.setBirthday("1996-03-03");
        userBean.setAddress("&#x6E56;&#x5317;");
        UserDao.getInstance(MainActivity.this).update(userBean);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //DatabaseHelper.getInstance(this).close();
    }

}

</articlebean></articlebean></userbean></articlebean></articlebean></userbean></articlebean></articlebean></userbean></userbean>

运行结果如下图所示:

Android 数据库框架ormlite 使用

最后,贴出ORMLite中常用标签和各个属性代表的意义:

常见标签:

DatabaseTable:通过其中的tableName属性指定数据库名称
DatabaseField:代表数据表中的一个字段
ForeignCollectionField:一对多关联,表示一个UserBean关联着多个ArticleBean(必须使用ForeignCollection集合)
常见属性:

id:当前字段是不是id字段(一个实体类中只能设置一个id字段)
columnName:表示当前属性在表中代表哪个字段
generatedId:设置属性值在数据表中的数据是否自增
useGetSet:是否使用Getter/Setter方法来访问这个字段
canBeNull:字段是否可以为空,默认值是true
unique:是否唯一
defaultValue:设置这个字段的默认值
foreignColumnName:外键约束指向的类中的属性名
foreign:当前字段是否是外键
foreignAutoRefresh:如果这个属性设置为true,在关联查询的时候就不需要再调用refresh()方法了

Original: https://blog.csdn.net/hdhhd/article/details/127774316
Author: 谈情不如逗狗.
Title: Android 数据库框架ormlite 使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815439/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球