1. 程式人生 > >Android資料庫三:xutils3框架之資料庫使用詳解!

Android資料庫三:xutils3框架之資料庫使用詳解!

1.新增依賴

compile 'org.xutils:xutils:3.5.0'

2.github地址

https://github.com/wyouflf/xUtils3

3.新增許可權

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

4.初始化

// 在application的onCreate中初始化
@Override
public void onCreate() {
    super.onCreate();
    x.Ext.init(this);
    x.Ext.setDebug(BuildConfig.DEBUG); // 是否輸出debug日誌, 開啟debug會影響效能.
    ...
}

5.實體類

package com.example.xutils3.db;

import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;

/**
 * Created by xiaoyehai on 2016/11/8.
 */
@Table(name = "UserInfo")
public class UserInfo {

    @Column(name = "id", isId = true, autoGen = true)
    private int id;

    @Column
(name = "name") private String name; @Column(name = "age") private int age; @Column(name = "sex") private String sex; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public
void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }

6.XUtilsManager

package com.example.xutils3.db;

import org.xutils.DbManager;
import org.xutils.x;

import java.io.File;

/**
 * Created by xiaoyehai on 2016/11/8.
 */
public class XUtilsManager {

    private static XUtilsManager mInstance;

    private DbManager dbManager;

    private XUtilsManager() {
    }

    public static XUtilsManager getInstance() {
        if (mInstance == null) {
            synchronized (XUtilsManager.class) {
                if (mInstance == null) {
                    mInstance = new XUtilsManager();
                }
            }
        }
        return mInstance;
    }

    public DbManager getDbManager() {
        if (dbManager == null) {
            initDbManager();
        }
        return dbManager;
    }

    private void initDbManager() {
        File dbFile = new File("/sdcard/xutils/db");
        if (!dbFile.exists()) {
            dbFile.mkdirs();
        }
        DbManager.DaoConfig config = new DbManager.DaoConfig()
                .setDbDir(dbFile) //資料庫路徑
                .setDbName("xutil") //資料庫名
                .setDbVersion(1) //設定資料庫版本
                .setDbUpgradeListener(new DbManager.DbUpgradeListener() {
                    @Override
                    public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
                        // TODO: 2016/11/8 資料庫更新操作
//                        try {
                        //                            db.addColumn(UserInfo.class, "test");
                        //                        } catch (DbException e) {
                        //                            e.printStackTrace();
                        //                        }
                    }
                });
        dbManager = x.getDb(config);
    }
}



7. 資料庫增刪改查方法

package com.example.xutils3.db;

import org.xutils.DbManager;
import org.xutils.common.util.KeyValue;
import org.xutils.db.sqlite.WhereBuilder;
import org.xutils.ex.DbException;

import java.util.List;

/**
 * 資料庫增刪改查方法
 * Created by xiaoyehai on 2018/1/16 0016.
 */

public class UserInfoDao {

    private final DbManager mDbManager;

    public UserInfoDao() {
        mDbManager = XUtilsManager.getInstance().getDbManager();
    }

    /**
     * 新增資料
     *
     * @param list
     */
    public void addData(List<UserInfo> list) {
        try {
            //mDbManager.delete(UserInfo.class);
            //mDbManager.save(list);
            //mDbManager.saveBindingId(list);
            //mDbManager.saveOrUpdate(list);

            mDbManager.replace(list); //儲存或更新實體類或實體類的List到資料庫, 根據id和其他唯一索引判斷資料是否存在.
        } catch (DbException e) {
            e.printStackTrace();
        }
    }

    /**
     * 刪除全部資料
     */
    public void deleteAllData() {
        try {
            mDbManager.delete(UserInfo.class);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }

    /**
     * 根據id刪除資料
     */
    public void deleteDataById(int id) {
        try {
            mDbManager.deleteById(UserInfo.class, id); //刪除指定id資料
            //根據指定條件刪除
            // mDbManager.delete(UserInfo.class, WhereBuilder.b("sex", "=", "女"));
            //mDbManager.delete(UserInfo.class, WhereBuilder.b("id", ">=", "50").and("id", "<=", "100"));
        } catch (DbException e) {
            e.printStackTrace();
        }
    }

    /**
     * 根據條件刪除資料
     */
    public void deleteDataByCondition(WhereBuilder whereBuilder) {
        try {
            //根據指定條件刪除
            // mDbManager.delete(UserInfo.class, WhereBuilder.b("sex", "=", "女"));
            //mDbManager.delete(UserInfo.class, WhereBuilder.b("id", ">=", "50").and("id", "<=", "100"));

            mDbManager.delete(UserInfo.class, whereBuilder);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }

    /**
     * 更新資料:修改表中的某一條資料
     */
    public void updateData(UserInfo userInfo, String... columnNames) {
        try {
            mDbManager.update(userInfo, columnNames);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }


    /**
     * 修改表中的某些資料
     *
     * @param whereBuilder1
     * @param whereBuilder2
     * @param keyValue
     */
    public void updateData2(WhereBuilder whereBuilder1, WhereBuilder whereBuilder2, KeyValue... keyValue) {
        try {
            mDbManager.update(UserInfo.class, whereBuilder1.or(whereBuilder2), keyValue);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }

    /**
     * 查詢所有資料
     */
    public List<UserInfo> findAllData(Class<UserInfo> tclass) {
        try {
            //UserInfo first = mDbManager.findFirst(tclass);查詢第一條資料
            return mDbManager.findAll(tclass);
        } catch (DbException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 根據條件查詢
     */
    public List<UserInfo> findDataByCondition(Class<UserInfo> tclass, WhereBuilder whereBuilder) {
        try {
            List<UserInfo> allList = mDbManager.selector(tclass).where(whereBuilder).findAll();
            return allList;
        } catch (DbException e) {
            e.printStackTrace();
        }
        return null;
    }
}

8.Activity

package com.example.xutils3.db;

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

import com.example.xutils3.R;

import org.xutils.common.util.KeyValue;
import org.xutils.db.sqlite.WhereBuilder;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;

import java.util.ArrayList;
import java.util.List;

/**
 * /**
 * XUtils3的資料庫模組:
 * 1.DbManager的初始化
 * 2.實體類種要對錶名和列名加註解
 */

@ContentView(R.layout.activity_db)
public class DBActivity extends AppCompatActivity {

    @ViewInject(R.id.tv)
    private TextView tv;

    private UserInfoDao mUserInfoDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        x.view().inject(this);

        mUserInfoDao = new UserInfoDao();
    }

    /**
     * 增加資料
     *
     * @param view
     */
    @Event(R.id.btn_save)
    private void save(View view) {
        List<UserInfo> list = new ArrayList<>();
        UserInfo userInfo;
        for (int i = 0; i < 50; i++) {
            userInfo = new UserInfo();
            //useInfo.setId(1); //可以不設定,主鍵
            userInfo.setName("糖糖" + i);
            userInfo.setAge(10 + i);
            userInfo.setSex("女");

            list.add(userInfo);
        }
        mUserInfoDao.addData(list);
    }

    /**
     * 刪除資料
     *
     * @param view
     */
    @Event(R.id.btn_delete)
    private void delete(View view) {
        mUserInfoDao.deleteAllData(); //刪除所有資料
    }

    /**
     * 更新資料
     *
     * @param view
     */
    @Event(R.id.btn_update)
    private void update(View view) {
        //1.修改表中的某一條資料
        UserInfo userInfo = new UserInfo();
        userInfo.setId(10);
        userInfo.setName("dd");
        userInfo.setAge(25);
        mUserInfoDao.updateData(userInfo, "name", "age");

        //2.修改表中的某些資料
        KeyValue nameValue = new KeyValue("name", "李欽");
        KeyValue ageValue = new KeyValue("age", "123");
        WhereBuilder whereBuilder1 = WhereBuilder.b("id", "=", "20");
        WhereBuilder whereBuilder2 = WhereBuilder.b("id", "=", "30");
        mUserInfoDao.updateData2(whereBuilder1, whereBuilder2, nameValue, ageValue);
    }

    /**
     * 查詢資料
     *
     * @param view
     */
    @Event(R.id.btn_find)
    private void find(View view) {
        //查詢全部資料
        List<UserInfo> allList = mUserInfoDao.findAllData(UserInfo.class);

        //條件查詢
        // List<UserInfo> list = db.selector(UserInfo.class).where("name", "=", "劍聖1").findAll();
        //WhereBuilder whereBuilder = WhereBuilder.b("name", "=", "糖糖5");
        //List<UserInfo> allList = mUserInfoDao.findDataByCondition(UserInfo.class, whereBuilder);

        if (allList != null) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < allList.size(); i++) {
                UserInfo info = allList.get(i);
                sb.append(info.getId() + ",").append(info.getName() + ",").append(info.getAge() + ",")
                        .append(info.getSex()).append("\n");
            }
            tv.setText(sb);
        }
    }
}