Android开发之LitePal数据库操作
在我之前的一篇博客里面,我们着重讨论了使用SQLiteOpenHelper类来对数据库进行相关的增删改查操作。但是,我感觉到学习起来明显吃力。不仅还要自己重写各种方法,而且参数那些实在是让人头大。现在,我们来讨论一种比较人性化的数据库操作方式:LitePal。
LitePal是一款开源的数据库框架,现在已经被托管到GitHub上,它采用ORM的方式,并且封装了很多数据库操作功能,因此我们可以不用写SQL语句来实现对数据库的很多操作。
使用LitePal有一点稍微麻烦一点,就是使用之前需要配置一下Gradle,但是这绝对是不吃亏的,因为配置好会非常简单。
1.配置:
在Project文件结构下,打开app下的bulid.gradle文件,在dependencies{ }中添加一行implemention语句用于构建LitePal。
implementation 'org.litepal.android:core:1.5.1'
我到GitHub上查到目前最新的版本是1.5.1。
现在已经将LitePal引入到我们的包中。接下来我们在包里面构建一个路径来保存我们使用LitePal构建的数据库的相关属性。
在src包中的main目录下构建一个assets目录(右键main/New/Directory),在assets路径中建立一个文件(右键assets/New/File),名字为litepal.xml(注意需要拓展名),使用xml文件构建数据库属性。在该文件下写入如下代码:
<?xml version="1.0" encoding="utf-8"?>
<litepal> //表示为litepal类型
<dbname value="Bookstore" ></dbname> //数据库名字为BookStore
<version value="1" ></version> //数据库版本是1
<list> //预留表的映射模型
</list>
</litepal>
最后我们到AndroidManifest文件中配置一下:在<application>标签里面添加
android:name="org.litepal.LitePalApplication"
这一句和我们数据库的正常运行密不可分。
到这里配置暂时结束。
2.操作:
(1)建表
新建一个java类表示一张表,在java类中设置各种参数,代码如下:
public class Book extends DataSupport //datasupport中封装了各种操作方法,一定要继承它
{
private int id; //设置各种属性
private String author;
private String name;
private double price;
private int pages;
public int getId() { //属性初始化函数
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
}
ps:简直太优美了这种写法,而且这种写法和我们的自然逻辑思维很贴合。快速写这些函数的方法:windows下alt+insert,mac下command+N,选择setter+getter。
创建完成表后,在我们的litepal.xml中的list标签中添加关系映射:
<mapping class="com.example.androidtest.Book"></mapping>
总之,你需要建立多少张表,就需要写多少个类,然后再list标签里面添加相关的映射语句就ok。这里的映射语句是 包名.表名。注意,包名一定要完整,即从com打头开始写起。
现在,我们可以MainActivity中开始使用了。
注意:我使用的布局沿用之前的布局:https://blog.csdn.net/qq_38554160/article/details/89010214
下面是建表的关键代码
Button button1 = findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Connector.getDatabase();
}
});
在点击事件中仅仅需要一句代码就完成了建表操作。简直不要太舒服!
(2)增:
下面给出关键代码:
Button button2 = findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book= new Book();
book.setId(1);
book.setAuthor("余华");
book.setName("活着");
book.setPages(230);
book.setPrice(33.4);
book.save();
}
});
建立一个对象,然后使劲往里面添加数据就ok!最后save保存一下就大功告成!我的天,这才是人看的代码嘛。
如果要添加多行数据,重新new一个新的Book对象,然后添加方法和上面一样。
(3)删
删除方式有两种:一种是无条件删除:也就是,当初是哪个对象添加的数据,即对象名.save(),如果要删除的话,直接对象名.detete()方法就ok!
第二种是有条件删除:也就是通过给定条件筛选来删除。
代码如下:
Button button3 =findViewById(R.id.button3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DataSupport.deleteAll(Book.class,"price<? and pages<?","35","300");
}
});
是不是很简洁?!deleteAll()是条件筛选删除。多个删除条件使用and关键字连接。?我们之前见过了,表示占位符。后面给出具体值。
(4)改
其实也很容易。需要改动什么属性,直接再set一遍,传入新的值,再save一下,就ok!
但是这种方式不灵活,下面给出一种更加灵活的方法。
我们可以先把新的值写好,然后通过updateAll()方法去筛选,再去做替换。其实在其中进行了部分查询操作。代码如下
Button button4 = findViewById(R.id.button4);
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book = new Book();
book.setPrice(20);
book.updateAll("name= ? and author= ?","活着","余华");
}
});
如果我们需要调整价格,则先set一下新的价格,然后通过条件定位到需要更改的那一行,使用updateAll()直接替换原来的价格就好了。
(5)查
因为查询出来的值有多个,需要通过一个集合来保存。使用集合的原因是里面子元素的类型可以指定类型。使用findAll()方法查询后,其返回值为对象类型使用List集合的Book类型保存。然后for循环遍历使用get方法获得值即可。下面给出代码:
button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<Book> bookList = DataSupport.findAll(Book.class);
for(Book book:bookList){
System.out.println(book.getId());
System.out.println(book.getName());
System.out.println(book.getAuthor());
System.out.println(book.getPrice());
System.out.println(book.getPages());
}
}
});
在Logcat中可以找到打印出来的值。
注意:我们这里是查询所有的结果。我们还可以指定条件查询。在findAll继续传入限制条件即可条件查询,方法等同于updateAll(),这里不再赘述。其实,还有很多其他高级的查询API,这里不再介绍,本篇博客仅仅作为入门阅读。
如果这些API不能满足你的方法,那么LitePal同样支持SQL语句进行操作。
总结:如果说SQLiteOpenHelper是新石器时代,那么LitePal则是现代社会!真的太舒服了有木有!!!
上一篇: android6.0以上权限问题
推荐阅读
-
android studio之litepal基本操作
-
android之LitePal 3.0 的基本使用
-
Android开发之LitePal数据库操作
-
Android中数据库开发之LitePal的基本用法
-
Android开发设计模式六大原则之单一职责原则
-
android 数据库处理及操作 博客分类: android android数据库sd卡
-
spring boot开发web api应用实践(二)操作数据库 博客分类: spring boot 实践笔记 spring bootspring boot 操作数据库
-
Android开发学习 之 四、Activity
-
最新JAVA调用新浪微博API之发微博、发图片 博客分类: JAVA java微博开发微博API之发微博、发图片java发送微博java操作微博发送图片微博开发
-
详解spring开发_JDBC操作MySQL数据库