Android开发之LitePal数据库的使用(参考于《Android 第一行代码》)

Android开发之LitePal数据库的使用(参考于《Android 第一行代码》),第1张

配置相关文件

在使用之前要进行相关配置,首先要在app.build.gradle中引入LitePal的依赖(下面最后一行代码)

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    implementation 'org.litepal.guolindev:core:3.2.3'
}

然后在main下新建文件夹assets,并在其下创建litepal.xml

 并在litepal.xml中写入以下信息,数据库名字为BookStore,list标签中放的是数据库中的数据表,这里有两张表,Book和Category



    
    

    
    

    
    
        
        
    


再AndroidMainfest.xml中注册LitePal

以上就是LitePal的配置过程,配置好之后就可以正式开始创建数据库并对它进行CURD(增删查改)了

创建数据库

新建一个Book类,数据库中的一张Book表,让它继承于LitePalSupport(书中是DataSupport,已经被弃用,现在改用LitePalSupport),get和set方法创建快捷键(Alt+Insert)

public class Book extends LitePalSupport {
    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;
    
    public int getId() {
        return id;
    }

    public String getAuthor() {
        return author;
    }

    public double getPrice() {
        return price;
    }

    public int getPages() {
        return pages;
    }

    public String getName() {
        return name;
    }

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

    public void setAuthor(String author) {
        this.author = author;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public void setName(String name) {
        this.name = name;
    }

    
}

回到litepal.xml中,引入此数据表,上面代码已经给出,看下面截图。

 

 

在activity_main.xml中新建一个按钮,用于创建数据库。

在MainActivity中设置此按钮的监听器,点击按钮的时候创建数据库和里面的数据表。,这里给出相关代码。调用Connector.getDatabase()即可创建,是不是很简单。

Button CreateDatabase=findViewById(R.id.btn_create);
        CreateDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Connector.getDatabase();
                Toast.makeText(MainActivity.this, "创建成功", Toast.LENGTH_SHORT).show();
            }
        });

创建成功之后可以使用adb shell进入设备,然后使用相关命令去查看数据库和数据表是否存在,存在就说明创建成功。但是到目前为止我们只有空表,也就是说表里面没有数据的。

添加数据

想要看到数据,就要往里面添加数据,这就涉及到CURD中的添加数据了,下面来看看怎么使用LitePal往数据库中添加数据。

同样我们先设置一个按钮,用来添加数据。

如果我们要在Book中添加一项press,就直接在里面添加就行,很简单

private String press;

    public String getPress() {
        return press;
    }
    public void setPress(String press) {
        this.press = press;
    }

如果要添加一张表呢,那就再新建一个类,比如Category类,在里面定义相关的表项。切记要去litepal.xml中引入这张表。当然数据库的版本也要更新了,原来是1,现在更新为2了。

 看看到现在我们新建了哪些内容。

 litepal存放数据库的信息,Book和Category存放两张数据表的内容

 然后该监听按钮了,新建一个Book对象,调用set方法设置我们要添加的数据,最后调用save()方法保存即可,再到数据库中查看,发现可以看到Book表中有了一条数据。

Button AddData=findViewById(R.id.btn_add);
        AddData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Book book=new Book();
                book.setName("The Da Vinci Code");
                book.setAuthor("Dan Brown");
                book.setPages(454);
                book.setPrice(16.96);
                book.setPress("Unknown");
                book.save();
                Toast.makeText(MainActivity.this,"添加成功",Toast.LENGTH_SHORT).show();
            }
        });
更新数据

更新数据的方法有好几种,这里就只介绍最方便灵巧的一种。

同样要设置一个按钮。

然后监听按钮事件

Button UpdataData=findViewById(R.id.btn_update);
        UpdataData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Book book=new Book();
                //设置要更新的内容以及更新以后的数据
                book.setPrice(14.95);
                book.setPress("Anchor");
                //设置更新条件,name是The Lost Symbol且author是Dan Brown的全部更新为以上设置
                book.updateAll("name=? and author=?","The Lost Symbol","Dan Brown");
                Toast.makeText(MainActivity.this,"更新成功",Toast.LENGTH_SHORT).show();
            }
        });

最后的updateAll里面的参数,是不是有点像SQL语句呢。点击按钮以后,会发现所有name是The Lost Symbol且author是Dan Brown的行的Price都变成了14.95、Press都变成了Anchor。

注意:再使用updateAll的时候,会涉及到一个默认值的情况,int的默认值为0,String的默认值是null,如果我们要设置某一项的内容为默认值,就不能再使用set()方法了,而应该使用setToDefault()方法。

错误的写法:

book.setId(0);

正确的写法:

book.setToDefalut("id")

update()方法没有指定数据的时候就默认对所有数据都进行修改。

删除数据

删除使用的是LitePal.deleteAll()方法(书中使用的是DataSupport.deleteAll()方法,此方法已被弃用),我们直接看代码。

设置按钮

监听按钮

Button DeleteData=findViewById(R.id.btn_delete);
        DeleteData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LitePal.deleteAll(Book.class,"price

第一个参数用于指定我要 *** 作的表Book,后面的参数是数据设置的条件,如果不设置则默认删除所有。

查询数据

使用LitePal.findAll()方法(书中使用的是DataSupport.findAll()方法,此方法已被弃用)

设置按钮

监听按钮,这是查询Book表中的所有数据

Button QueryData=findViewById(R.id.btn_query);
        QueryData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                    List books = LitePal.findAll(Book.class);//查询的数据存放到List中
                    for (Book book : books){//遍历List取出数据并打印
                        Log.d("MainActivity", book.getName());
                        Log.d("MainActivity", book.getAuthor());
                        Log.d("MainActivity", Integer.toString(book.getPages()));
                        Log.d("MainActivity", Double.toString(book.getPrice()));
                    }
                    Toast.makeText(MainActivity.this,"查询成功",Toast.LENGTH_SHORT).show();
                }
        });

查询第一条数据

List books =LitePal.findFirst(Book.class);

查询最后一条数据

List books =LitePal.findLast(Book.class);

还可以使用select进行查询

List books =LitePal.select("name","author","pages")
                        .where("pages>?","400")
                        .order("pages")
                        .limit(10)
                        .offset(10)
                        .find(Book.class);

limit(10)表示前10行,offset(10)表示偏移为10,也就是11-20行,order("pages")表示结果按照pages升序排列。

这段代码表示查询Book表中第11-20条满足页数大于400这个条件的name,author,pages这3列数据,并将查询结果按照页数升序排列。

当然,如果以上的API还不能满足查询需求,LitePal还支持原生的SQL查询,调用LitePal.findBySQL()方法。注意此方法返回的是一个Cursor对象,要用前面的方法取出数据。

Cursor cursor=LitePal.findBySQL("select * from Book where pages > ? and price < ?","400","20");

最后附上查询结果图

命令行查看

 点击查询按钮得到的结果

 

以上就是使用LitePal *** 作数据库的全部过程。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/989708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)