在使用之前要进行相关配置,首先要在app.build.gradle中引入LitePal的依赖(下面最后一行代码)
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
implementation 'org.litepal.guolindev:core:3.2.3'
}
然后在main下新建文件夹assets,并在其下创建litepal.xml
并在litepal.xml中写入以下信息,数据库名字为BookStore,list标签中放的是数据库中的数据表,这里有两张表,Book和Category
再AndroidMainfest.xml中注册LitePal
以上就是LitePal的配置过程,配置好之后就可以正式开始创建数据库并对它进行CURD(增删查改)了
创建数据库新建一个Book类,数据库中的一张Book表,让它继承于LitePalSupport(书中是DataSupport,已经被弃用,现在改用LitePalSupport),get和set方法创建快捷键(Alt+Insert)
public class Book extends LitePalSupport {
private int id;
private String author;
private double price;
private int pages;
private String name;
public int getId() {
return id;
}
public String getAuthor() {
return author;
}
public double getPrice() {
return price;
}
public int getPages() {
return pages;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setAuthor(String author) {
this.author = author;
}
public void setPrice(double price) {
this.price = price;
}
public void setPages(int pages) {
this.pages = pages;
}
public void setName(String name) {
this.name = name;
}
}
回到litepal.xml中,引入此数据表,上面代码已经给出,看下面截图。
在activity_main.xml中新建一个按钮,用于创建数据库。
在MainActivity中设置此按钮的监听器,点击按钮的时候创建数据库和里面的数据表。,这里给出相关代码。调用Connector.getDatabase()即可创建,是不是很简单。
Button CreateDatabase=findViewById(R.id.btn_create);
CreateDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Connector.getDatabase();
Toast.makeText(MainActivity.this, "创建成功", Toast.LENGTH_SHORT).show();
}
});
创建成功之后可以使用adb shell进入设备,然后使用相关命令去查看数据库和数据表是否存在,存在就说明创建成功。但是到目前为止我们只有空表,也就是说表里面没有数据的。
添加数据想要看到数据,就要往里面添加数据,这就涉及到CURD中的添加数据了,下面来看看怎么使用LitePal往数据库中添加数据。
同样我们先设置一个按钮,用来添加数据。
如果我们要在Book中添加一项press,就直接在里面添加就行,很简单
private String press;
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
如果要添加一张表呢,那就再新建一个类,比如Category类,在里面定义相关的表项。切记要去litepal.xml中引入这张表。当然数据库的版本也要更新了,原来是1,现在更新为2了。
看看到现在我们新建了哪些内容。
litepal存放数据库的信息,Book和Category存放两张数据表的内容
然后该监听按钮了,新建一个Book对象,调用set方法设置我们要添加的数据,最后调用save()方法保存即可,再到数据库中查看,发现可以看到Book表中有了一条数据。
Button AddData=findViewById(R.id.btn_add);
AddData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book=new Book();
book.setName("The Da Vinci Code");
book.setAuthor("Dan Brown");
book.setPages(454);
book.setPrice(16.96);
book.setPress("Unknown");
book.save();
Toast.makeText(MainActivity.this,"添加成功",Toast.LENGTH_SHORT).show();
}
});
更新数据
更新数据的方法有好几种,这里就只介绍最方便灵巧的一种。
同样要设置一个按钮。
然后监听按钮事件
Button UpdataData=findViewById(R.id.btn_update);
UpdataData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Book book=new Book();
//设置要更新的内容以及更新以后的数据
book.setPrice(14.95);
book.setPress("Anchor");
//设置更新条件,name是The Lost Symbol且author是Dan Brown的全部更新为以上设置
book.updateAll("name=? and author=?","The Lost Symbol","Dan Brown");
Toast.makeText(MainActivity.this,"更新成功",Toast.LENGTH_SHORT).show();
}
});
最后的updateAll里面的参数,是不是有点像SQL语句呢。点击按钮以后,会发现所有name是The Lost Symbol且author是Dan Brown的行的Price都变成了14.95、Press都变成了Anchor。
注意:再使用updateAll的时候,会涉及到一个默认值的情况,int的默认值为0,String的默认值是null,如果我们要设置某一项的内容为默认值,就不能再使用set()方法了,而应该使用setToDefault()方法。
错误的写法:
book.setId(0);
正确的写法:
book.setToDefalut("id")
update()方法没有指定数据的时候就默认对所有数据都进行修改。
删除数据删除使用的是LitePal.deleteAll()方法(书中使用的是DataSupport.deleteAll()方法,此方法已被弃用),我们直接看代码。
设置按钮
监听按钮
Button DeleteData=findViewById(R.id.btn_delete);
DeleteData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LitePal.deleteAll(Book.class,"price","15");//删除所有价格小于15的数据
Toast.makeText(MainActivity.this,"删除成功",Toast.LENGTH_SHORT).show();
}
});
第一个参数用于指定我要 *** 作的表Book,后面的参数是数据设置的条件,如果不设置则默认删除所有。
查询数据使用LitePal.findAll()方法(书中使用的是DataSupport.findAll()方法,此方法已被弃用)
设置按钮
监听按钮,这是查询Book表中的所有数据
Button QueryData=findViewById(R.id.btn_query);
QueryData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
List books = LitePal.findAll(Book.class);//查询的数据存放到List中
for (Book book : books){//遍历List取出数据并打印
Log.d("MainActivity", book.getName());
Log.d("MainActivity", book.getAuthor());
Log.d("MainActivity", Integer.toString(book.getPages()));
Log.d("MainActivity", Double.toString(book.getPrice()));
}
Toast.makeText(MainActivity.this,"查询成功",Toast.LENGTH_SHORT).show();
}
});
查询第一条数据
List books =LitePal.findFirst(Book.class);
查询最后一条数据
List books =LitePal.findLast(Book.class);
还可以使用select进行查询
List books =LitePal.select("name","author","pages")
.where("pages>?","400")
.order("pages")
.limit(10)
.offset(10)
.find(Book.class);
limit(10)表示前10行,offset(10)表示偏移为10,也就是11-20行,order("pages")表示结果按照pages升序排列。
这段代码表示查询Book表中第11-20条满足页数大于400这个条件的name,author,pages这3列数据,并将查询结果按照页数升序排列。
当然,如果以上的API还不能满足查询需求,LitePal还支持原生的SQL查询,调用LitePal.findBySQL()方法。注意此方法返回的是一个Cursor对象,要用前面的方法取出数据。
Cursor cursor=LitePal.findBySQL("select * from Book where pages > ? and price < ?","400","20");
最后附上查询结果图
命令行查看
点击查询按钮得到的结果
以上就是使用LitePal *** 作数据库的全部过程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)