安卓数据存储之使用LitePal操作数据库

版权声明:转载请标明出处 https://blog.csdn.net/easy_purple/article/details/80585423
在学习郭神的第一行代码,使用SQLiteDatabase来操作数据库感觉不是很方便,然而郭神的开源库——LitePal用起来就很方便了。
首先配置LitePal
1、编辑app/buile.gradle文件
在dependencies闭包中添加一行代码:(红色加粗的是版本的意思)
compile 'org.litepal.android:core: 1.5.0 '
这样就吧LitePal引入到当前项目中了。
2、编辑litepal.xml文件
右击app/src/main目录,【new】->【Directory】,创建一个assets目录,然后在assets目录下再新建一个litepal.xml文件,接着编辑litepal.xml里边的内容:
<? xml version="1.0" encoding="utf-8" ?>
<litepal>
<dbname value="BookStore"></dbname>
<version value="3"></version>

<list>
</list>
</litepal>
其中,里边的 <dname>标签用于指定数据库的名字,<version>标签用于指定数据库版本号,<list>标签用于指定所有的影射模型。
3、修改AndroidManifest.xml文件(红色加粗内容为添加的内容)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dell.practice_litepal_demo">

<application
android:name="org.litepal.LitePalApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
……
</application>

</manifest>
我们将项目的application配置为 org.litepal.LitePalApplication,这样才能让LitePal的所哟功能都可以正常工作。

创建数据库
1、新建一个实体类:Book类
package com.example.dell.practice_litepal_demo;

/**
* Created by dell on 2018/6/4.
* Created by qiyueqing on 2018/6/4.
*/

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;
}
}
修改litepal.xml
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore"></dbname>
<version value="3"></version>

<list>
<mapping class="com.example.dell.practice_litepal_demo.Book"></mapping>
</list>
</litepal>
使用<mapping>标签来声明我们要配置的影射模型类型,一定要使用完整的类名。不管偶多少模型类需要影射,都使用相同的方式配置在<list>中
3、修改MainActivity中的代码:(布局文件只有一个Button按钮,此处就不写出了)
package com.example.dell.practice_litepal_demo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import org.litepal.tablemanager.Connector;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button createDatabase = (Button) findViewById(R.id.id_create_database);
createDatabase.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Connector.getDatabase();
}
});
}
}
运行项目,点击按钮,数据库BookStore.db就建立好了,而且自己的book数据库也建立好了,通过adb shell来查看一下数据库的创建情况,并查看自己的建表语言:(到了这里,不会使用sqlite3命令行查看自己项目创建的数据库,参考上一篇博文)

升级数据库
上一小节我们创建好了book数据表,如果我们想在表中添加一列press呢?
直接修改Book实体类中的代码:
package com.example.dell.practice_litepal_demo;

/**
* Created by dell on 2018/6/4.
* Created by qiyueqing on 2018/6/4.
*/

public class Book {
……
private String press;

public String getPress() {
return press;
}

public void setPress(String press) {
this.press =press;
}
……
}
再添加一个Category表,我们需要新建一个Category实体类,并在litpal.xml中配置这个实体类的信息, 并将版本号+1
Category实体类:
package com.example.dell.practice_litepal_demo;

/**
* Created by dell on 2018/6/5.
* Created by qiyueqing on 2018/6/5.
*/

public class Category {

private int id;
private String categoryCode;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getCategoryCode() {
return categoryCode;
}

public void setCategoryCode(String categoryCode) {
this.categoryCode = categoryCode;
}
}
litpal.xml文件
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="BookStore"></dbname>
<version value="2"></version>

<list>
<mapping class="com.example.dell.practice_litepal_demo.Book"></mapping>
<mapping class="com.example.dell.practice_litepal_demo.Category"></mapping>
</list>
</litepal>
此时我们重新运行程序,点击按钮,再查看一下建表语句:

使用LitePal添加数据
对表今星期CRUD操作是必须要继承Datasupport类。
public class Book  extends DataSupport {
……
}
添加【添加数据】按钮,并编写事件
Button addData = ( Button ) findViewById ( R.id . id_add_data ) ;

addData.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Book book = new Book();
book.setName("第一万行代码");
book.setAuthor("大神");
book.setPages(9999);
book.setPrice(99.9);
book.setPress("Unknow");
book.save();
}
});
运行结果如图:

使用LitePal更新数据
添加【更新数据】按钮,并为其编写事件(将书名为“第一行代码”而且作者为“大神”的数据价格更新为100.0)
Button updateData = (Button) findViewById(R.id.id_update_data);

updateData.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Book book = new Book();
book.setPrice(100.0);
book.updateAll("name=? and author=?","第一万行代码","大神" );
}
});
运行结果如图:
使用LitePal删除数据
在删除数据前我们先多增加几个数据:
添加【删除数据】按钮,并为其编写事件
Button deleteData = ( Button ) findViewById ( R.id . id_delete_data ) ;

deleteData.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
DataSupport.deleteAll(Book.class,"price<?","88");
}
});
然后我们点一下删除按钮,运行结果如图:
使用LitePal查询数据
添加【查询数据】按钮,并为其编写事件
Button queryData = (Button) findViewById(R.id.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.i("MainActivity", "book name is " + book.getName());
}
}
});


猜你喜欢

转载自blog.csdn.net/easy_purple/article/details/80585423