xUtils3.0的使用(三) 数据库操作

[color=green]最近才接触xUtils,看了一会才发现已更新3.0的新版本,例子简直少的可怜,还是各种互抄各种转载=。=[/color]
[color=green]<!----------吐槽的分割线----------------------------————————————————————----------------->[/color]

[size=medium]本文主要就单表查询做一番演示(为了解耦做了一点封装):[/size]
[size=medium]这里一共有四步操作:[/size]
[color=darkred][size=medium][b]1.首先,得有个实体类吧(xUtils用注解建表)
2.新建一个DatabaseOpenHelper类,封装初始化操作,提供DbManager.DaoConfig对象(数据库辅助建立类)
3.新建一个与业务数据库操作相关的类,这里就是PersonDB类(具体业务模块实现类)
这个类会把一些常用的数据库操作封装起来
4.在Activity中使用[/b][/size][/color]

[color=green]<!-----------实操分割线-----------------------————————————————————---------------------->[/color]
1.创建实体类
@Table(name="Person")
public class Person {
@Column(name = "id",isId = true)
private int id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;

public Person() {
}

public Person(String name, int age) {
this.name = name;
this.age = age;
}
//这里注意,要使用构造器初始化时,必须再提供一个无参构造器
//我觉得是和注解有关吧
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;
}

@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
//为了测试方便加个toString
}


2.DatabaseOpenHelper类
public class DatabaseOpenHelper {
private DbManager.DaoConfig daoConfig;
public DatabaseOpenHelper(String name,int version) {
daoConfig = new DbManager.DaoConfig()
.setDbName(name)
.setDbVersion(version)
.setDbOpenListener(new DbManager.DbOpenListener() {
@Override
public void onDbOpened(DbManager db) {
db.getDatabase().enableWriteAheadLogging();
//开启WAL, 对写入加速提升巨大(作者原话)
}
})
.setDbUpgradeListener(new DbManager.DbUpgradeListener() {
@Override
public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
//数据库升级操作
}
});
}
public DbManager.DaoConfig getDaoConfig(){
return daoConfig;
}
}


3.PersonDB类
public class PersonDB {
public static final String DB_NAME = "person.db";
//数据库名
public static final int VERSION = 1;
//数据库版本号
private static PersonDB personDB;
private static DbManager db;
//接收构造方法初始化的DbManager对象
private PersonDB(){
DatabaseOpenHelper databaseOpenHelper = new DatabaseOpenHelper(DB_NAME,VERSION);
db = x.getDb(databaseOpenHelper.getDaoConfig());
}
//构造方法私有化,拿到DbManager对象
public synchronized static PersonDB getIntance(){
if (personDB == null){
personDB = new PersonDB();
}
return personDB;
}
//获取PersonDB实例

/****************************************************************************************/
//写两个测试方法,也就是常用的数据库操作
public void savePerson(Person person){
try {
db.save(person);
Log.d("xyz","save succeed!");
} catch (DbException e) {
Log.d("xyz",e.toString());
}
}
//将Person实例存进数据库
public List<Person> loadPerson(){
List<Person> list = null;
try {
list = db.selector(Person.class).findAll();
} catch (DbException e) {
e.printStackTrace();
}
return list;
}
//读取所有Person信息
}


4.在Activity中使用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

PersonDB personDB = PersonDB.getIntance();
Person person1 = new Person("jay",20);
Person person2 = new Person("wang",40);
personDB.savePerson(person1);
personDB.savePerson(person2);
//写
List<Person> list = personDB.loadPerson();
if (list!=null) {
for (Person person : list) {
Log.d("xyz", person.toString());
}
}
//读
}
}


[size=medium][color=red][b]<!--------16/8/2/19:48更新--------------------------------------------------------------------------------------->[/b][/color][/size]
由于对数据库单例不熟,有以下改进写法:
DatabaseOpenHelper类:
public class DatabaseOpenHelper {
private DbManager.DaoConfig daoConfig;
private static DbManager db;
private final String DB_NAME = "mydb";
private final int VERSION = 1;
private DatabaseOpenHelper() {
daoConfig = new DbManager.DaoConfig()
.setDbName(DB_NAME)
.setDbVersion(VERSION)
.setDbOpenListener(new DbManager.DbOpenListener() {
@Override
public void onDbOpened(DbManager db) {
db.getDatabase().enableWriteAheadLogging();
//开启WAL, 对写入加速提升巨大(作者原话)
}
})
.setDbUpgradeListener(new DbManager.DbUpgradeListener() {
@Override
public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
//数据库升级操作
}
});
db = x.getDb(daoConfig);
}
public static DbManager getInstance(){
if (db == null){
DatabaseOpenHelper databaseOpenHelper = new DatabaseOpenHelper();
}
return db;
}
}


PersonDB类:
public class PersonDB {
private DbManager db;
//接收构造方法初始化的DbManager对象
public PersonDB(){
db = DatabaseOpenHelper.getInstance();
}
/****************************************************************************************/
//写两个测试方法
public void savePerson(Person person){
try {
db.save(person);
Log.d("xyz","save succeed!");
} catch (DbException e) {
Log.d("xyz",e.toString());
}
}
//将Person实例存进数据库
public List<Person> loadPerson(){
List<Person> list = null;
try {
list = db.selector(Person.class).findAll();
} catch (DbException e) {
e.printStackTrace();
}
return list;
}
//读取所有Person信息
}


在Activity中使用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PersonDB personDB = new PersonDB();
Person person1 = new Person("jay",20);
Person person2 = new Person("wang",40);
personDB.savePerson(person1);
personDB.savePerson(person2);
List<Person> list = personDB.loadPerson();
if (list!=null) {
for (Person person : list) {
Log.d("xyz", person.toString());
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值