欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用LitePal操作数据库(实现对数据的增、删、改、查)

程序员文章站 2022-06-01 21:07:57
...

一、LitePal是什么?

LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发最常用的一些数据库功能进行了封装,使得不写一行SQL语句就可以完成各种建表和增、删、改、查的操作。LitePal的项目主页:点击此处

二、配置LitePal

1.使用LitePal第一步,就是编辑app/build.gradle文件,在dependencies包中添加如下内容:

    compile 'org.litepal.android:core:1.6.1'

注意:最后的1.6.1是版本号的意思,最新的版本号到LitePal的项目主页上查看。

2.在app下新建assets文件夹,在此文件夹下新建 litepal.xml,接着编辑 litepal.xml,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
//创建数据库
    <dbname value="Music"></dbname>
//版本号
    <version value="1"></version>

   <!--定义您的模型和映射标签列表中,LitePal
  为每个映射类创建表。支持字段
  中定义的模型将被映射到列。-->
    <list>


    </list>
</litepal>
  • dbname配置项目的数据库名称。
  • 版本配置数据库的版本。每次你想升级数据库,加值。
  • 列表配置映射类。
  • 存储配置数据库文件应保存在这里。内部和外部是唯一有效的选项。

3.在Manifest中注册name标签:
如果已经有name标签则可以省略这一步

 <application
 //在Manifest中注册name标签
        android:name="org.litepal.LitePalApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

接下来就可以创建数据库了
在mian.java中做以下修改:

public class MainActivity extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);
    }
    ...
}

4.接下来创建数据:
首先定义模型。例如有一个模型专辑。下面的模型可以被定义为:

public class Album extends DataSupport {
    @Column(unique = true, defaultValue = "unknown")
    private String name;

    private float price;

    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 List<Song> getSongs() {
        return songs;
    }

    public void setSongs(List<Song> songs) {
        this.songs = songs;
    }


}

然后将这些模型添加到映射在litepal.xml列表:

        <mapping class="com.test.project.litepaltest.Album"></mapping>

下次将生成的表操作数据库。例如,获得SQLiteDatabase以下代码:
修改mian.java代码:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SQLiteDatabase db=LitePal.getDatabase();
    }

5.表创建好,接下来,就可实现数据的增、删、改、查:
布置mian.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.test.project.litepaltest.MainActivity">

 <EditText
     android:layout_width="match_parent"
     android:layout_height="50dp"
     android:id="@+id/insert_et"
     android:hint="输入要插入的专辑名"

     />

 <Button
     android:layout_width="match_parent"
     android:layout_height="50dp"
     android:text="insert"
     android:id="@+id/insert_db_btn"
     />
 <EditText
     android:layout_width="match_parent"
     android:layout_height="50dp"
     android:id="@+id/update_et"
     android:hint="输入新的专辑名"
     />
 <Button
     android:layout_width="match_parent"
     android:layout_height="50dp"
     android:text="update"
     android:id="@+id/update_db_btn"
     />
 <Button
     android:layout_width="match_parent"
     android:layout_height="50dp"
     android:text="delete"
     android:id="@+id/delete_db_btn"
     />
 <Button
     android:layout_width="match_parent"
     android:layout_height="50dp"
     android:text="quary"
     android:id="@+id/quary_db_btn"
     />

</LinearLayout>

布置mian.java代码:

  1. 使用sava方法保存数据,即插入数据。
  2. 每个模型的继承自DataSupport也会更新()和updateAll()方法。可以更新一个指定id。
  3. 可以删除单个记录,使用DataSupport delete()方法。
  4. 使用Id、或者模糊查询,查询数据。
public class MainActivity extends AppCompatActivity  implements View.OnClickListener {

    private  Button insertBtn;
    private EditText insertEt;
    private  Button updateBtn;
    private  Button deleteBtn;
    private  Button quaryBtn;
    private EditText updateEt;
    private EditText insertSongEt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        SQLiteDatabase db=LitePal.getDatabase();
        bindId();
    }

    private void bindId() {
        insertBtn=findViewById(R.id.insert_db_btn);
        insertEt=findViewById(R.id.insert_et);
        updateBtn=findViewById(R.id.update_db_btn);
        updateEt=findViewById(R.id.update_et);
        insertSongEt=findViewById(R.id.insert_song_et);
        deleteBtn=findViewById(R.id.delete_db_btn);
        quaryBtn=findViewById(R.id.quary_db_btn);

        insertBtn.setOnClickListener(this);
        updateBtn.setOnClickListener(this);
        deleteBtn.setOnClickListener(this);
        quaryBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){

            case R.id.insert_db_btn:
                //插入专辑名
                String albumName=insertEt.getText().toString();
                float price=109.6f;

                Album album=new Album();
                album.setName(albumName);
                album.setPrice(price);
                album.save();

                break;
            case R.id.update_db_btn:
                //更新专辑名
                String albumName1=updateEt.getText().toString();
                Album album1= DataSupport.find(Album.class,3);
                album1.setName(albumName1);
                album1.save();
                break;
            case  R.id.delete_db_btn:
                //删除专辑名
                int row=DataSupport.delete(Album.class,2);
                break;
            case R.id.quary_db_btn:
                //查找专辑名
//                Album album2=DataSupport.find(Album.class,3);
                //模糊查询
               List<Album> albumList= DataSupport.where("name like ? ","B%").find(Album.class);

                for (Album a:albumList
                     ) {
                    Log.e("onClick: ",a.getName()+"**************");
                }
                break;

        }
    }
}