LitePal数据库简单使用
To live is to function , that is all there is in living.
LitePal是一个Android开源原生库,它使开发者使用SQLite数据库变得非常容易。 你可以不用写一句SQL语句就可以完成大部分数据库操作,包括创建表,更新表,约束操作,聚合功能等等。LitePal的安装也相当简单,3分钟之内就可以将它集成到你的工程里。并且它特别轻量化,远比GreenDao占用更少资源,号称配置几乎为零。
它能够实现的功能如下:
1.使用对象关系映射(ORM) 模型。
2.几乎零配置(只有一个配置文件,该配置文件属性很少)。
3.自动维护所有表格(比如创建、更改、删除表格)。
4.提供封装的API,无需写SQL语句。
5.很棒的集群查询功能。
6.依然可以选择使用SQL,LitePal提供比原始更易用更好的API接口。
接下来开始在自己的工程里面配置litepal。
第一步:导入依赖包。
Litepal官方介绍https://github.com/LitePalFramework/LitePal#latest-downloads
直接在自己的项目的builde.gradle的denpendenceies下导入
// litepal依赖包导入 compile 'org.litepal.android:core:1.5.1'更加具体
第二步:创建application继承LitePalApplication
为什么要这么做尼,接下来请看,litapalApplication里面做了什么
public class LitePalApplication extends Application { /** * Global application context. */ static Context sContext; /** * Construct of LitePalApplication. Initialize application context. */ public LitePalApplication() { sContext = this; } /** * Deprecated. Use {@link LitePal#initialize(Context)} instead. * @param context * Application context. */ @Deprecated public static void initialize(Context context) { sContext = context; } /** * Get the global application context. * * @return Application context. * @throws org.litepal.exceptions.GlobalException */ public static Context getContext() { if (sContext == null) { throw new GlobalException(GlobalException.APPLICATION_CONTEXT_IS_NULL); } return sContext; } }可以发现他就做了一件事情获取上下文。
第三步,创建表
litepal创建表非常简单,和我们平时构造一个对象是一样的,只是这个对象需要继承DataSupport
为什么这么做尼,我复制下DataSupport这个类的介绍
* CREATE TABLE person ( * id integer primary key autoincrement, * age integer, * name text * ); * </pre> * * @author Tony Green * @since 1.1 */ public class DataSupport {很显然,这个DataSupport在通过我们给对象的属性来映射成表的字段,而表的名称对应的是创建的这个类名(StudentBeanDB)
第四步,声明数据库名称关联表
首先我们创建assets数据文件,然后在这个文件夹下创建一个名为LitePal的xml文件
创建asset文件夹的方法如下
创建litepal.xml
<litepal> <!--创建的数据库名称为demoTest--> <dbname value = "demoTest"/> <!--数据库版本号--> <version value = "1"/> <List> <!--创建的于demoTest下的StudentBeanDB表--> <maping class = "com.example.march_day18_litepal_simple_use.StudentBeanDB"/> </List> </litepal>
到此为止我们的数据库算是创建成功了,接下来我们运行一下看看
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建数据库 //LitePal.getDatabase(); Connector.getDataBase(); initDatas(); } private void initDatas() { StudentBeanDB bean; for (int i = 0; i < 30; i++) { bean = new StudentBeanDB(i,201703180+i,70+i,"胖娃娃"+i+"号","少女"); if(bean.save()){ Log.i("----->>", "保存成功 "); } } } }接下来看logcat
其实,这其中还是遇到了一个问题的,当时是由于在创建litepal.xml文件的时候多打了一个字母,致使litepal不能映射出数据库
ok,接下来对数据库进行增删查改操作。
public void touch(View v){ List<StudentBeanDB> all = DataSupport.findAll(StudentBeanDB.class); switch (v.getId()){ case R.id.db_add: StudentBeanDB newBean = new StudentBeanDB(all.size(), 201703180 + all.size(),70, "新同学——胖娃娃" + all.size() + "号", "小处男"); newBean.save(); break; case R.id.db_delete: DataSupport.deleteAll(StudentBeanDB.class,"sName = ?","胖娃娃5号"); break; case R.id.db_find: mResult.setText(null); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < all.size(); i++) { StudentBeanDB beanDB = all.get(i); stringBuilder.append("姓名:"+beanDB.getsName()+"学号:"+beanDB.getsId()+"性别:"+ beanDB.getsSex()+"年级:"+beanDB.getsClass()+"成绩:"+ beanDB.getsGread()+"\n"); } mResult.setText(stringBuilder.toString()); break; case R.id.db_re: ContentValues contentValues = new ContentValues(); contentValues.put("sName","小明要开车"); DataSupport.updateAll(StudentBeanDB.class,contentValues," sName = ?","胖娃娃11号"); break; } }
一· 查讯
DataSupport.findAll(StudentBeanDB.class)
二·增添数据
StudentBeanDB newBean = new StudentBeanDB(all.size(), 201703180 + all.size(),70, "新同学——胖娃娃" + all.size() + "号", "小处男");
newBean.save();
三·删除数据
DataSupport.deleteAll(StudentBeanDB.class,"sName = ?","胖娃娃5号");
在这部操作的时候其实使出了一个错的,错误日志如下:
为什么尼,我在查询某个固定的姓名时使用了“where sName = ? ",因为这个where出了错,这个是litepal提供的方便,但是太方便就会。。。
四·修改数据
ContentValues contentValues = new ContentValues();
contentValues.put("sName","小明要开车");
DataSupport.updateAll(StudentBeanDB.class,contentValues," sName = ?","胖娃娃11号");
其中ContenValues只是系统提供的一个HashMap。
以上便是litepal的简单使用,至于多表连接,多表查询,将在以后介绍。
奉上郭霖的相关讲解传送门litepal郭郭
一家之言,有误望君扶正,多谢。