对象关系映射(ORM) :我们的编程语言使用的是面向对象语言,数据库用的是关系型数据库,将面 向对象语言和关系型数据库建立的一种映射关系成为对象关系映射。
LitePal:开源的Android数据库框架,采用了对象关系映射(ORM),并将常用的数 据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表 和增删改查德操作。
配置LitePal
(1)编辑app/build.gradle,在dependencies中添加如下代码来声明开源库的引用:
compile 'org.litepal.android:core:1.4.1'
也可以再LitePal项目主页上查看最新的版本号 https://github.com/LitePalFramework/LitePal
(2)配置litepal.xml,在main目录下新建assets文件夹,并在该文件夹中新建litepal.xml,代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value="BookStore" ></dbname><!--数据库名字-->
<version value="1"></version><!--数据库版本号-->
<list><!--指定映射模型-->
</list>
</litepal>
(3)配置LitePalApplication,修改AndroidMainfest.xml,在<application中添加如下代码来保证LitePal的所有功能都能正常工作:
android:name="org.litepal.LitePalApplication"
一、数据库
1.1创建数据库
(1)修改activity_main.xml:
<?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:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:id="@+id/create_database"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Create database" />
<Button
android:id="@+id/add_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add data" />
<Button
android:id="@+id/update_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Update data" />
<Button
android:id="@+id/delete_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Delete data" />
<Button
android:id="@+id/query_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Query data" />
</LinearLayout>
(2)在MainActivity.java中添加如下代码:
//6.5.3创建数据库
Button createDatabase = (Button)findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LitePal.getDatabase();
}
});
1.2升级数据库(在2.1完成的基础上)
(1)新建一个Java Bean ,Category类:
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;
}
}
(2)修改litepal.xml,将version改为2,并把Category添加到映射模型列表中:
<?xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value="BookStore" ></dbname><!--数据库名字-->
<version value="2"></version><!--数据库版本号-->
<list><!--指定映射模型-->
<mapping class="com.example.litepaltest.Book"></mapping>
<mapping class="com.example.litepaltest.Category"></mapping>
</list>
</litepal>
1.3删除数据库
二、数据表
2.1建立数据表
(1)定义一个典型的Java Bean,Book类:
public class Book extends DataSupport {
private int id;
private String author;
private double price;
private int pages;
private String name;
private String press;
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;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
}
(2)将Book类添加到映射模型列表中,修改litpal.xml的代码:
<list><!--指定映射模型-->
<mapping class="com.example.litepaltest.Book"></mapping>
</list>
2.2修改数据表
2.3删除数据表
三、记录
3.1添加数据
在MainActivity.java中添加如下代码:
//6.5.4添加数据
Button addData = (Button)findViewById(R.id.add_data);
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.96);
book.setPress("Unknow");
book.save();
}
});
3.2更新数据
在MainActivity.java中添加如下代码:
方法①:
//6.5.5更新数据
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(16.95);
book.setPress("Unknow");
book.save();
book.setPrice(10.99);
book.save();
}
});
方法②:
//6.5.5更新数据
Button updateData = (Button)findViewById(R.id.update_data);
updateData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book = new Book();
book.setPrice(14.95);
book.setPress("Anchor");
book.updateAll("name=? and author=?",
"The Lost Symbol", "Dan Brown");
}
});
3.3删除数据
在MainActivity.java中添加如下代码:
//6.5.6删除数据
Button deleteData = (Button)findViewById(R.id.delete_data);
deleteData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DataSupport.deleteAll(Book.class, "price<?", "15");
}
});
3.4查询数据
例 findAll()方法——查询某表中的所有数据:
//6.5.7查询数据
Button queryData = (Button)findViewById(R.id.query_data);
queryData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<Book> 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 is " + book.getPages());
Log.d("MainActivity", "book price is " + book.getPrice());
Log.d("MainActivity", "book press is " + book.getPress());
}
}
});
其他常用的查询API:
查询第一条数据:Book firsBook = LitePal.findFirst(Book.class);
查询最后一条数据:Book lastBook = LitePal.findLast(Book.class);
查询指定列:select()
指定查询的约束条件:where()
指定结果的排序方式:order()
指定查询结果的数量:limit()
指定查询结果的偏移量:offset()
例如:
List<Book> books = LitePal.select("name","author","pages")
.where("pages>?","400")
.order("pages")
.limit(10)
.offset(10)
.find(Book.class);
以上代码的所有运行结果都已经用sqlite3命令查看过。