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>* 我们需要自定义一个类继承自ORMlite给我们提供的OrmLiteSqliteOpenHelper,创建一个构造方法,重写两个方法onCreate()和onUpgrade()* 在onCreate()方法中使用TableUtils类中的createTable()方法初始化数据表* 在onUpgrade()方法中我们可以先删除所有表,然后调用onCreate()方法中的代码重新创建表* <p>* 我们需要对这个类进行单例,保证整个APP中只有一个SQLite Connection对象* <p>* 这个类通过一个Map集合来管理APP中所有的DAO,只有当第一次调用这个DAO类时才会创建这个对象(并存入Map集合中)* 其他时候都是直接根据实体类的路径从Map集合中取出DAO对象直接调用*/public class DatabaseHelper extends OrmLiteSqliteOpenHelper {// 数据库名称public static final String DATABASE_NAME = "mydb.db";// 本类的单例实例private static DatabaseHelper instance;// 存储APP中所有的DAO对象的Map集合private Map<String, Dao> daos = new HashMap<>();// 获取本类单例对象的方法public static synchronized DatabaseHelper getInstance(Context context) {if (instance == null) {synchronized (DatabaseHelper.class) {if (instance == null) {instance = new DatabaseHelper(context);}}}return instance;}// 私有的构造方法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);}// 根据传入的DAO的路径获取到这个DAO的单例对象(要么从daos这个Map中获取,要么新创建一个并存入daos)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;}@Overridepublic void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {try {TableUtils.createTable(connectionSource, UserBean.class);TableUtils.createTable(connectionSource, ArticleBean.class);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {try {TableUtils.dropTable(connectionSource, UserBean.class, true);  //删除表格TableUtils.dropTable(connectionSource, ArticleBean.class, true);onCreate(database, connectionSource);} catch (SQLException e) {e.printStackTrace();}}// 释放资源@Overridepublic void close() {super.close();for (String key : daos.keySet()) {Dao dao = daos.get(key);dao = null;}}}

定义实体类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实体类,存储数据库中user表中的数据* <p>* 注解:* DatabaseTable:通过其中的tableName属性指定数据库名称* DatabaseField:代表数据表中的一个字段* ForeignCollectionField:一对多关联,表示一个UserBean关联着多个ArticleBean(必须使用ForeignCollection集合)* <p>* 属性:* id:当前字段是不是id字段(一个实体类中只能设置一个id字段)* columnName:表示当前属性在表中代表哪个字段* generatedId:设置属性值在数据表中的数据是否自增* useGetSet:是否使用Getter/Setter方法来访问这个字段* canBeNull:字段是否可以为空,默认值是true* unique:是否唯一* defaultValue:设置这个字段的默认值*/
@DatabaseTable(tableName = "user") // 指定数据表的名称
public class UserBean {// 定义字段在数据库中的字段名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:一对多关联,表示一个UserBean关联着多个ArticleBean(必须使用ForeignCollection集合)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;}@Overridepublic String toString() {return "UserBean{" +"id=" + id +", name='" + name + '\'' +", sex=" + sex +", birthday=" + birthday +", address='" + address + '\'' +", articles=" + articles +'}';}}
ArticleBean:
package youli.com.example.administrator.myview;import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;/*** ArticleBean实体类,存储article数据表中的数据* 数据库中的article表和user表是关联的,因此我们需要在article表中配置外键* <p>* foreignColumnName:外键约束指向的类中的属性名* foreign:当前字段是否是外键* foreignAutoRefresh:如果这个属性设置为true,在关联查询的时候就不需要再调用refresh()方法了*/
@DatabaseTable(tableName = "article")
public class ArticleBean {// article表中各个字段的名称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;}@Overridepublic String toString() {return "ArticleBean{" +"id=" + id +", title='" + title + '\'' +", content='" + content + '\'' +", user=" + user_id +'}';}
}

 从两个实体类中的代码来看,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提供的DAO类对象,第一个泛型是要操作的数据表映射成的实体类;第二个泛型是这个实体类中ID的数据类型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();}}// 向user表中添加一条数据public void insert(UserBean data) {try {dao.create(data);} catch (SQLException e) {e.printStackTrace();}}// 删除user表中的一条数据public void delete(UserBean data) {try {dao.delete(data);} catch (SQLException e) {e.printStackTrace();}}// 删除指定id醒public void deleteById(int id) {try {dao.deleteById(id);} catch (SQLException e) {e.printStackTrace();}}// 修改user表中的一条数据public void update(UserBean data) {try {dao.update(data);} catch (SQLException e) {e.printStackTrace();}}// 查询user表中的所有数据public List<UserBean> selectAll() {List<UserBean> users = null;try {users = dao.queryForAll();} catch (SQLException e) {e.printStackTrace();}return users;}// 根据ID取出用户信息public UserBean queryById(int id) {UserBean user = null;try {user = dao.queryForId(id);} catch (SQLException e) {e.printStackTrace();}return user;}// 根据关键字查询用户信息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;}
}
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;/*** 操作article表的DAO类*/
public class ArticleDao {private Context context;private  static ArticleDao articleDao;// ORMLite提供的DAO类对象,第一个泛型是要操作的数据表映射成的实体类;第二个泛型是这个实体类中ID的数据类型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();}}// 添加数据public void insert(ArticleBean data) {try {dao.create(data);} catch (SQLException e) {e.printStackTrace();}}// 删除数据public void delete(ArticleBean data) {try {dao.delete(data);} catch (SQLException e) {e.printStackTrace();}}// 修改数据public void update(ArticleBean data) {try {dao.update(data);} catch (SQLException e) {e.printStackTrace();}}// 通过ID查询一条数据public ArticleBean queryById(int id) {ArticleBean article = null;try {article = dao.queryForId(id);} catch (SQLException e) {e.printStackTrace();}return article;}// 通过条件查询文章集合(通过用户ID查找)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;}}

最后就是测试代码了。我们直接在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"><LinearLayoutandroid:layout_width="match_parent"android:gravity="center"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btn1"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="添加用户" /><Buttonandroid:id="@+id/btn1_1"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="添加文章" /><Buttonandroid:id="@+id/btn2"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="查询" /><Buttonandroid:id="@+id/btn3"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="删除" /><Buttonandroid:id="@+id/btn4"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:text="修改" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:orientation="horizontal"><EditTextandroid: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="姓名"android:text="李白"android:textSize="16dp" /><EditTextandroid: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="性别"android:text="男"android:textSize="16dp" /><EditTextandroid: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="生日"android:text="1996-02-02"android:textSize="16dp" /><EditTextandroid: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="住址"android:text="北京"android:textSize="16dp" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:orientation="horizontal"><EditTextandroid: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="标题"android:text="望相思"android:textSize="16dp" /><EditTextandroid: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="内容"android:text="床前明月光"android:textSize="16dp" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/text1"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="2dp"android:gravity="center"android:textSize="16dp" /></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;@Overrideprotected 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);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn1:     //新增用户getInsert();break;case R.id.btn1_1:   //新增文章getInsert_wz();getInsert_wz1();break;case R.id.btn2:     //查询
//                getQuery();getQuery1();break;case R.id.btn3:    //删除getDelete();break;case R.id.btn4:    //修改getUpdate();break;}}private void getInsert() {  //新增用户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);   // 添加用户数据UserDao.getInstance(MainActivity.this).insert(userData);}private void getInsert_wz() {  //新增文章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);    // 添加文章数据ArticleDao.getInstance(MainActivity.this).insert(articleData);}private void getInsert_wz1() {  //新增文章String title = mEdit5.getText().toString().trim();String content = mEdit6.getText().toString().trim();List<UserBean> list = UserDao.getInstance(MainActivity.this).querys("name", "李三思"); //唯一值  只有一条ArticleBean articleData = new ArticleBean(title, content, list.get(0));    // 添加文章数据ArticleDao.getInstance(MainActivity.this).insert(articleData);}/*** 根据文章查询 关联人的信息*/private void getQuery() {StringBuffer contentBuffer = new StringBuffer();ArticleBean articleBean = new ArticleDao(MainActivity.this).queryById(1); // 从数据库中根据ID取出文章信息contentBuffer.append(articleBean.toString());List<UserBean> list = UserDao.getInstance(MainActivity.this).selectAll();     //根据取出的用户id查询用户信息if (list == null || list.size() < 0) {return;}UserBean userBean = new UserDao(MainActivity.this).queryById(6);        // 从用户信息中取出关联的文章列表信息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());   // 设置TextView的文本}/*** 关键字查询跟人信息 与 关联的文章*/private void getQuery1() {StringBuffer contentBuffer = new StringBuffer();List<UserBean> list = UserDao.getInstance(MainActivity.this).querys("name", "李三思");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");}}// 设置TextView的文本text1.setText(contentBuffer.toString());}private void getDelete() {//查询用户List<UserBean> list = UserDao.getInstance(MainActivity.this).querys("name", "李三思");//删除用户关联的文章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);//删除}}//删除用户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("李三思");userBean.setSex("女");userBean.setBirthday("1996-03-03");userBean.setAddress("湖北");UserDao.getInstance(MainActivity.this).update(userBean);}@Overrideprotected void onDestroy() {super.onDestroy();//DatabaseHelper.getInstance(this).close();}}

 运行结果如下图所示:

  最后,贴出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()方法了

Android 数据库框架ormlite 使用相关推荐

  1. Android 数据库框架ormlite 使用精要

    Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...

  2. Android数据库框架-----ORMLite 的基本用法

    ORMLite 是一款非要流行的Android平台上的数据库框架,性能优秀,代码简洁: 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面. 缺点:1.基于反射,效率较低(本 ...

  3. Android 数据库框架ormlite 使用精要,万字总结

    先说说优点 1. 轻量级 2. 使用简单,易上手 3. 封装完善 4. 文档全面 缺点 1. 基于反射,效率较低 2. 缺少中文翻译文档 如何使用? 导入jar包到项目libs文件夹下 到http:/ ...

  4. Android数据库框架-ORMLite

    参考资料 Android ORMLite 框架的入门用法 Android 快速开发系列 ORMLite 框架最佳实践 添加依赖 compile 'com.j256.ormlite:ormlite-an ...

  5. Android数据库框架总结

    本文转自:http://blog.csdn.net/da_caoyuan/article/details/61414626 一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封 ...

  6. 使用反射+注解封装一个基于Sqlite极简的android数据库框架

    数据库 背景 GreenDao 封装 创建数据库 对象映射表 数据库操作 扩展 总结 背景 目前市面上已经有比较好用的数据库框架,比如GreenDao和OrmLite,而且功能也很齐全,那为什么还要多 ...

  7. Android 数据库框架 DBFlow 的使用

    原文首发于微信公众号:jzman-blog,欢迎关注交流! DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处 ...

  8. android mysql代码_LitePal——Android数据库框架完整使用手册(示例代码)

    LitePal for Android LitePal是一个开源的Android库,使开发人员使用SQLite数据库非常简单.您无需编写任何SQL语句就可以完成大部分数据库操作,包括创建或升级表,增. ...

  9. Android数据库框架-GreenDao入门,阿里P8架构师Android大厂面试题总结

    // in the individual module build.gradle files } } 之后点击Sync Project 2.2. 在app的build.gradle中配置 apply ...

最新文章

  1. Python 中的魔术方法(双下划线开头和结尾的方法)
  2. 前谷歌高管给初入职场新人的14条忠告
  3. Linux下使用system()函数一定要谨慎
  4. mysql world.sql.zip_安装mysql数据库zip版|mysqlzip
  5. php 使用css乱码,分享CSS字符编码引起乱码快速解决的方法
  6. mysql 网络io_MySQL的各种网络IO超时的用法和实现
  7. 使用netty实现一个http挡板,轻量又实用。收藏起来吧
  8. XLSReadWriteII 4.00.62 XE2 可以使用
  9. html测试报告模板,测试报告模板(完整版).doc
  10. 嵌入式linux操作framebuffer显示bmp图片
  11. 2017年上半年软件设计师考试真题及答案(上午+下午)免费
  12. 移动硬盘上安装Ubuntu18.04系统
  13. Stack的三种含义
  14. 区分单音节,双音节和多音节
  15. 微信端H5页面调用分享接口
  16. [架构之路-61]:目标系统 - 平台软件 - 基础中间件 - 远程过程(函数)调用RPC原理与其网络架构
  17. 前端javascript 实现导出excel 支持分页
  18. WinForm在窗体中嵌入窗体
  19. IE6调试JS_se7en3_新浪博客
  20. 【参赛作品15】openGauss数据库维护管理

热门文章

  1. 爬虫一定要用代理IP吗,不用行不行
  2. show master status为空值
  3. 神经网络算法有哪些模型,常用的神经网络模型
  4. [生存志] 第75节 礼经士礼尚书记言
  5. 基于埋点日志数据的网络流量统计(网站总浏览量(PV)的统计)
  6. linux下如何计算cpu利用率,Linux下的CPU利用率计算原理详解
  7. python爬取全国13个城市旅游数据,告诉你那里最受欢迎
  8. shell 删除七日内日志_SHELL脚本定期删除日志文件(日志定期清理)
  9. 2017谷歌开发者大会GDD Review and Kotlin图片和嘉宾PPT放送~
  10. openjudge3344 冷血格斗场 解题报告