LitePal
LitePal是一个Android强大的数据开源库,它使开发者使用SQLite数据库变得非常容易。 程序员可以不用写一句SQL语句就可以完成大部分数据库操作,而且LitePal不需要写SQL语句就可以实现数据库的增删查改功能。
LitePal的使用
一、LitePal用前准备
1.导入依赖库
想要使用LitePal就需要导入第三方插件,也就是依赖库,这样我们就不需要自己建立数据库,直接使用Android中自带的数据库,极大的减少了我们在建立数据库时所浪费的时间。
在build.gradle文件并添加下面的依赖关系:
dependencies {
compile 'org.litepal.android:core:1.6.1'
}
2.配置litepal.xml
在项目中创建一个名为assets的文件夹,并在其中创建一个文件将其命名为litepal.xml.然后将以下代码复制到其中。
<?xml version="1.0" encoding="utf-8"?>
<litepal>
//定义应用程序的数据库名称
<dbname value="demo" />
//定义数据库的版本
<version value="1" />
//使用映射标签在列表中定义模型,LitePal将为每个映射类创建表格,存储配置数据库文件应存储的位置
<list>
<mapping class="com.lenovo.liu.litepol.entity.Album" />
<mapping class="com.lenovo.liu.litepol.entity.Student" />
</list>
</litepal>
3.配置LitePalApplication
我们需要在AndroidManifest中配置LitePalApplication,例如:
<application
//配置LitePalApplication
android:name="org.litepal.LitePalApplication"
</application>
二、使用LitePal
首先我们需要建两个类添加到litepal.xml中的映射列表中
Song类
public class Songextends DataSupport {
@Column(nullable = false)
private String name;
private int duration;
//忽略 不存储在数据库
@Column(ignore = true)
private String uselessField;
private Album album;
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;
}
}
Album类
public class Album extends DataSupport {
//unique = true,使表中数据唯一
//唯一,可空,并且,默认值是unkonwn
@Column(unique = true, defaultValue = "unknown")
private String name;
private float price;
private byte[] cover;
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;
}
}
Activity中xml代码
<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="com.lenovo.liu.litepol.MainActivity">
//定义一个输入框,和增删改查四个按钮控件
<EditText
android:id="@+id/main_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/add_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="添加"/>
<Button
android:id="@+id/modify_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="修改"/>
<Button
android:id="@+id/delete_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="删除"/>
<Button
android:id="@+id/query_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="查询"/>
</LinearLayout>
Activity代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//定义xml中的控件
private EditText albumEdit;
private Button addBtn;
private Button modifyBtn;
private Button deleteBtn;
private Button queryBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//在开始启动时,要创建数据库,只需启动一次
// SQLiteDatabase liteDatabase= LitePal.getDatabase();
bindID();
}
//绑定id和监听事件
private void bindID() {
addBtn=findViewById(R.id.add_btn);
modifyBtn=findViewById(R.id.modify_btn);
deleteBtn=findViewById(R.id.delete_btn);
queryBtn=findViewById(R.id.query_btn);
albumEdit=findViewById(R.id.main_edit);
albumEdit.setOnClickListener(this);
addBtn.setOnClickListener(this);
modifyBtn.setOnClickListener(this);
deleteBtn.setOnClickListener(this);
queryBtn.setOnClickListener(this);
}
//进行点击事件的判断
@Override
public void onClick(View view) {
switch (view.getId()){
//增加数据
case R.id.add_btn:
//获取输入框的内容
String albumName=albumEdit.getText().toString();
//运用float型
float price=109.90f;
//定义数据表
Album album=new Album();
album.setName(albumName);
album.setPrice(price);
//保存数据表
album.save();
break;
//更改数据
case R.id.modify_btn:
//用DataSupport.find更改表中某一行数据,第一个参数是数据表,第二个参数是id
Album album1 = DataSupport.find(Album.class, id);
//更改price
album1.setPrice(20.99f);
//更改名字
album1.setName("xiao");
//保存数据表
album1.save();
break;
//删除数据
case R.id.delete_btn:
//删除某行数据
int row=DataSupport.delete(Album.class, id);
//删除所有数据,第三个参数是?的占位符
//int row=DataSupport.deleteAll(Album.class, "id>?","3");
break;
//查询数据
case R.id.query_btn:
//更改某一行数据
Album album2 = DataSupport.find(Album.class, id);
//更改所有数据
List<Album> allSongs = DataSupport.findAll(Album.class);
//更改指定的数据
List<Album> songs = DataSupport.where("id< ?", "4").find(Album.class);
//运用for循环输出所有数据
// for (Album a:allSongs){
// Log.e( "onClick: ", a.getName()+"***********************");
// }
//运用for循环输出指定的数据
for (Album a:songs){
Log.e( "onClick: ", a.getName()+"***********************");
}
//打印某行数据
// Log.e( "onClick: ", album2.getName()+"***********************");
break;
}
}
}