Android資料庫三:xutils3框架之資料庫使用詳解!
阿新 • • 發佈:2019-02-05
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);
}
}
}