版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1.引入litepal的jar包
引入jar包或者远程依赖都可以,我这里是下载的jar包,litepal的github地址
2.新建litepal.xml文件
新建assets目录如下图:
在assets目录下新建litepal.xml文件
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo" ></dbname>
<version value="1" ></version>
<list>
<mapping class="com.dk.litepal_new.model.Album"/>
<mapping class="com.dk.litepal_new.model.Song"/>
</list>
</litepal>
其中dbname是数据库名称,version是数据库版本,list中放的是模型类
3.在Application中初始化litepal
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);//初始化litepal
}
}
4.建表Album和Song
模型类Album
public class Album extends LitePalSupport {
@Column(unique = true,defaultValue = "unknow")
private String name;
private float price;
private byte[] cover;
private Date releaseDate;
private List<Song> songs = new ArrayList<>();//此处用来形成和song一对多的关系
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public byte[] getCover() {
return cover;
}
public void setCover(byte[] cover) {
this.cover = cover;
}
public List<Song> getSongs() {
return songs;
}
public void setSongs(List<Song> songs) {
this.songs = songs;
}
public Date getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(Date releaseDate) {
this.releaseDate = releaseDate;
}
}
模型类Song
public class Song extends LitePalSupport {
@Column(nullable = false)
private String name;
private int duration;
@Column(ignore = true)
private String uselessField;
private Album album;//此处用来和Album形成多对一的关系(在song表中生成外键album_id)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getDuration() {
return duration;
}
public void setDuration(int duration) {
this.duration = duration;
}
public String getUselessField() {
return uselessField;
}
public void setUselessField(String uselessField) {
this.uselessField = uselessField;
}
public Album getAlbum() {
return album;
}
public void setAlbum(Album album) {
this.album = album;
}
}
5.使用litepal
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick({R.id.add,R.id.add_many_for_one,R.id.add_list,R.id.update,
R.id.update1,R.id.delete,R.id.delete1,R.id.query,R.id.query1,
R.id.query2,R.id.query3,R.id.save})
public void onClick(View view){
switch(view.getId()){
case R.id.add://增加数据
Album album = new Album();
album.setName("单独的album"+getRandomNum());
album.save();
break;
case R.id.add_many_for_one://增加一对多关系的数据
Album album1 = new Album();
album1.setName("一对多关系的album"+getRandomNum());
album1.setPrice(10.99f);
album1.save();
Song song1 = new Song();
song1.setName("song"+getRandomNum());
song1.setDuration(320);
song1.setAlbum(album1);
song1.save();
Song song2 = new Song();
song2.setName("song"+getRandomNum());
song2.setDuration(356);
song2.setAlbum(album1);
song2.save();
break;
case R.id.add_list://增加集合
List<Album> albumList = new ArrayList<>();
for(int i=0;i<5;i++){
Album album2 = new Album();
album2.setName("集合中的album++"+i);
albumList.add(album2);
}
LitePal.saveAll(albumList);
break;
case R.id.update://根据id修改数据
Album album2 = new Album();
album2.setName("修改后的名字");
album2.update(1);
break;
case R.id.update1://根据自己设置的条件修改数据
Album album3 = new Album();
album3.setName("修改后的名字=====");
album3.updateAll("id > ? and name =?","20","集合中的album4");
// album3.updateAll();
break;
case R.id.delete://根据id删除
LitePal.delete(Album.class,1);
break;
case R.id.delete1://根据自己设置的条件删除数据
LitePal.deleteAll(Album.class,"id > ?","21");
// LitePal.deleteAll(Album.class);
break;
case R.id.query://根据id查询数据
Album album4 = LitePal.find(Album.class,2);
Log.e("打印查询的数据",album4.getName());
break;
case R.id.query1://查询全部数据
List<Album> allAlbums = LitePal.findAll(Album.class);
for(int i=0;i<allAlbums.size();i++){
Log.e("打印集合"+i,"的名字:"+allAlbums.get(i).getName());
}
break;
case R.id.query2://根据自己设置的条件查询
List<Album> allAlbums1 = LitePal.
where("name like ? and id > ?","集合中的%","17").
order("id desc").
find(Album.class);
for(int i=0;i<allAlbums1.size();i++){
Log.e("打印集合"+i,"的名字:"+allAlbums1.get(i).getName());
}
break;
case R.id.query3://在处理大量数据采用异步方式查询
LitePal.findAllAsync(Album.class).listen(new FindMultiCallback() {
@Override
public <T> void onFinish(List<T> list) {
Log.e("打印集合长度",list.get(0).toString());
}
});
break;
case R.id.save://在处理大量数据采用异步方式插入数据
Album album5 = new Album();
album5.setName("插入大量数据"+getRandomNum());
album5.setPrice(10.55f);
album5.saveAsync().listen(new SaveCallback() {
@Override
public void onFinish(boolean b) {
Log.e("打印存储是否成功",b+"");
}
});
break;
}
}
private int getRandomNum(){
return (int)(Math.random()*100);
}
}
MainActivity的布局文件
<?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"
tools:context=".MainActivity">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="增加数据"/>
<Button
android:id="@+id/add_many_for_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="增加数据(多对一关系)"/>
<Button
android:id="@+id/add_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="增加集合"/>
<Button
android:id="@+id/update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="根据id修改"/>
<Button
android:id="@+id/update1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="根据条件修改"/>
<Button
android:id="@+id/delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="根据id删除"/>
<Button
android:id="@+id/delete1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="根据条件删除"/>
<Button
android:id="@+id/query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="根据id查询"/>
<Button
android:id="@+id/query1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询全部数据"/>
<Button
android:id="@+id/query2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询条件数据"/>
<Button
android:id="@+id/query3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="如果有大量数据,查询使用异步"/>
<Button
android:id="@+id/save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="如果有大量数据,插入使用异步"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
6.查看手机中本地数据库
查看手机本地数据库的数据,下载RE文件管理器,然后去根目录下寻找data/data/包名/databases/数据库名称 直接点开查看(手机需要先root,模拟器可以直接查看)