据说学了这个之后就不想碰SQLite了~
LitePal是个开源库,采用了对象关系映射(ORM)的模式,并将我们平时开发最常用的一些数据库功能进行封装,效果:不用编写一行SQL语句就可以完成各种建表和删改查的操作。
第一步:下载litepal的jar包。(下载地址点击打开链接)http://https//github.com/LitePalFramework/LitePal#latest-downloads
第二步:将其复制到libs目录下,然后右键add as a library。参见了该条博客点击打开链接(https//blog.csdn.net/guolin_blog/article/details/38556989),确认添加之后,进入第三步。
第三步:在app/build.gradle 文件中声明该开源库的引用。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile 'org.litepal.android:core:1.6.1'
compile files('libs/litepal-1.6.1-src.jar')
}
第四步:右键app/src/main目录——New——Directory,命名为assets。
第五步:右键assets——File,命名为litepal.xml。并编辑其内容为
标签:指定所有的映射类型
第六步:配置LitePalApplication,修改AndroidMainFest.xml中的代码
【!】注意:如果org.litepal.LitePalApplication变红色,说明litepal的jar没有正确地导入、配置,应返回第一步重新操作。
如此便全部配置结束啦!
1. 对象关系映射(ORM)模式:使用面向对象的编程语言,而使用关系型数据库,将面向对象的语言和面向关系的数据库之间建立一种映射关系。
好处:用面向对象的思维来操作数据库,而不用和SQL语言打交道。
2. 范例1:创建数据库BookStore.db,含有一个表:book
(1)layout_main.xml ,和上一节的布局一样
(2)新建Book.java类
public class Book {
private int id;
private String author;
private double price;
private int pages;
private String name;
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 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;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
真诚地感谢伟大的程序猿锅锅们,自动生成setter和getter的感觉不要太酷!!!(自动生成办法 点击打开链接
https//jingyan.baidu.com/article/36d6ed1f6b088b1bcf4883ce.html)
(3)litepal.xml ,将Book类添加到映射模型列表中
(4)MainActivity.java ,响应按键,生成数据库
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button createData=(Button) findViewById(R.id.create_database);
createData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Connector.getDatabase();
}
});
}
}
(5)查看数据库创建情况
可以看到创建成功啦!
进一步查看建表语句,有三条。
3. 范例2:升级数据库:为Book表增加一个press类,在BookStore.db中增加一张表
(1)Book.java ,增加一条属性
private String press;
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
(2)新建Category.java ,增加这个表
public class Category {
private int id;
private String categoryName;
private int categoryCode;
public void setId(int id) {
this.id = id;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public void setCategoryCode(int categoryCode) {
this.categoryCode = categoryCode;
}
}
(3)litepal.xml ,修改版本号,升级操作
(4)运行结果(重点观察建表语句)
结论:这个比前面学的方法好用太多了!
1. 范例:向表中添加数据
(1)Book.java,修改一下继承父类
public class Book extends DataSupport{
...
}
(2)MainActivity.java,响应按键,实例化对象
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book =new Book(); //实例化
book.setName("The Da Vinci Code");//设置各项属性的取值
book.setAuthor("Dan Brown");
book.setPages(454);
book.setPrice(16.98);
book.setPress("unknow");
book.save();//最后通过save()完成添加
}
});
(3)运行结果
数据添加成功啦!
1. 更新方式有几种
2. 最简单的更新方式:对已存储的对象重新设值,然后再次调用sava()方法。
(1)已存储对象 概念:对litepal而言,是通过model.saved()方法来判断:true-已存储;false-未存储。
返回true只有两种情况:1-已经调用过model.save()方法添加数据;2-model对象时通过LitePal提供的查询API查询出来的。先看第一种的情况。
(2)范例1:修改书本价格
① MainActivity.java
Button updateData =(Button) findViewById(R.id.update_data);
updateData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book=new Book();
book.setName("The Lost Symbol");
book.setAuthor("Dan Brown");
book.setPages(510);
book.setPrice(19.95);
book.setPress("unknow");
book.save();
book.setPrice(30.5);//将价格修改为30.5
book.save();
}
});
② 运行结果:价格变化了
3. 另一种更为灵巧的更新方式(不局限于已存储的对象)
(1)采用updateAll()方法,括号中可以添加条件,对某个/类对象修改某个属性
(2)范例2:将《The Lost Symbol》这本书的价格改为100,出版社改为Anchor
① MainActivity.java
updateData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book=new Book();
book.setPrice(100);
book.setPress("Anthor");
book.updateAll("name = ? and author = ?","The Lost Symbol","Dan Brown");
② 运行结果:价格和出版社都改变了
3. 将某条记录的属性值改为默认值,不可以通过model.setPrice(0);的方式,有一个特定的方法:setToDefault()方法。
范例3:将所有书本的页码设置为0
(1)MainActivity.java
Button updateData =(Button) findViewById(R.id.update_data);
updateData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book=new Book();
book.setToDefault("pages");//将Paages这条属性的值变为Pages 的默认值。
book.updateAll();//所有书本的页码都要更新。
(2)运行结果:页码全部变成0
1. 和更新类似,有两种方式:
方式一:model.delete();和更新的第一种方法类似,这个也只能删除”已存储对象”,不举例了。
方式二:DataSupport.deleteAll()方法,括号中可以添加约束条件,不添加则将该表中所有记录删除。
2. 范例1:采用DataSupport.deleteAll()删除数据。
(1)MainActivity.java
Button deleteData=(Button)findViewById(R.id.delete_data);
deleteData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DataSupport.deleteAll(Book.class, "price < ?","20");//把比20便宜的书删掉
}
});
(2)运行结果:低于20元的书本记录不见了。
6.5.7 使用LitePal查询数据
1. 比SQLite好太多!DataSupport.findAll()方法。
(1)范例1:查询Book表中的所有数据
Button queryData=(Button)findViewById(R.id.query_data);
queryData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List books=DataSupport.findAll(Book.class);
}
});
(2)完整范例2:查询并打印信息:
Button queryData=(Button)findViewById(R.id.query_data);
queryData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List books=DataSupport.findAll(Book.class);
for (Book book:books){
Log.d("MainActivity","book name is "+book.getName());
Log.d("MainActivity","book author is "+book.getAuthor());
Log.d("MainActivity","book pages are "+book.getPages());
Log.d("MainActivity","book price is "+book.getPrice());
Log.d("MainActivity","book press is "+book.getPress());
}
}
});
运行结果:把Book表中所有书本的信息都打印出来了
2. 更多查询API
(1)查询Book表中的第一条数据
Book firstBook = DataSupport.findFirst(Book.class);
(2)查询Book表中的第二条数据
Book LastBook = DataSupport.findLast(Book.class));
(3)采用连缀查询来定制更多功能。