Xutils3总结2之数据库

本文介绍了Xutils3在数据库操作中的使用,包括事务的概念、如何开启多线程操作、ORM对象关系映射的含义,以及Xutils3的增删改查步骤。此外,还提到了异常处理和查看数据库文件的默认路径。
1,什么叫事务?
	把N多次操作作为一个整体,从第一个执行到最后一个不可以中断,多个事务之间相互独立互不干扰,事务中始终保持数据的一致性。
	
	
2,Xutils3之数据库中:
	~1,在开启数据库时添加一个监听,在监听中添加:db.getDatabase().enableWriteAheadLogging();   //开启数据库支持多线程操作
	~2,利用xutils3建立表的步骤:
		!1,类上边添加 : @Table(name = "",onCreated="sql")
		!2,属性上边添加:@Column(name = "id",isId = true,autoGen = true,property == "NOT NULL" )
	
	
3,什么叫ORM?
	~1,全称:Object Relation Mapping  对象关系映射。
	~2,意义:面向对象编程语言中的一种编程技术,用于实现不同类型系统的数据之间的转换。
	


4,出现"error running app instant run requires"异常时,解决方法:
	Tools -> Adnroid -> enable ADB integration
	
	
5,Xutils3 存储数据时,不但可以存储单个数据(db.save(d))还可以存储一个集合(db.save(ArrayList al))。




6,查看数据库文件默认路径:/data/data/sc.emperor.ps.databasedemo/databases 


7,Xutils3 增删改查步骤;
	~1,集成Xutils3:
		!1,添加Intent、Write权限
		!2,在Gradle Scripts中添加依赖 compile 'org.xutils:xutils:3.3.38'
		!3,新建App继承Application添加 x.Ext.init(this);
		
	~2,相关类代码:
package sc.emperor.ps.databasedemo;

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

import org.xutils.DbManager;
import org.xutils.db.sqlite.SqlInfo;
import org.xutils.db.sqlite.WhereBuilder;
import org.xutils.db.table.DbModel;
import org.xutils.ex.DbException;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.x;

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

@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {


    private DbManager.DaoConfig dd = new DbManager.DaoConfig().setDbName("ps.db").setDbOpenListener(new DbManager.DbOpenListener() {
        @Override
        public void onDbOpened(DbManager db) {
            db.getDatabase().enableWriteAheadLogging();
        }
    });

    private DbManager db = x.getDb(dd);


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

    /**
     * 创建库、创建表、添加数据
     *
     * @param v
     */
    @Event(R.id.bt_Create)
    private void onCreate(View v) throws DbException {

        ArrayList<Employee> list = new ArrayList<>();
        list.add(new Employee("L1", "man", 21));
        list.add(new Employee("L2", "woman", 31));
        list.add(new Employee("L3", "man", 41));
        list.add(new Employee("L4", "woman", 51));
        list.add(new Employee("L5", "man", 61));
        list.add(new Employee("L6", "woman", 71));
        list.add(new Employee("L7", "man", 81));


        db.save(list);

    }

    /**
     * 删除数据库内容
     *
     * @param v
     * @throws DbException
     */
    @Event(R.id.bt_delDb)
    private void onDelDb(View v) throws DbException {
        db.dropDb();

    }

    /**
     * 删除数据库中的表
     *
     * @param v
     * @throws DbException
     */
    @Event(R.id.bt_delSheet)
    private void onDelSheet(View v) throws DbException {
        db.dropTable(Employee.class);

    }

    /**
     * 删除数据库中名字为L3的那条数据
     *
     * @param v
     * @throws DbException
     */
    @Event(R.id.bt_delData)
    private void onDelData(View v) throws DbException {
        WhereBuilder b = WhereBuilder.b();
        b.and("name", "=", "L3");
        db.delete(Employee.class, b);


    }

    /**
     * 修改所有年龄大于40所有女性名字叫“哈哈”
     *
     * @param v
     */
    @Event(R.id.bt_update)
    private void onUpdate(View v) throws DbException {
        String sql = "select id,name,age,sex from Employee_info where age > 40 and sex = 'woman' ";

        List<DbModel> ls = db.findDbModelAll(new SqlInfo(sql));

        for (DbModel d : ls
                ) {
            int id = d.getInt("id");

            Employee e = db.findById(Employee.class, id);
            e.setName("哈");

            db.saveOrUpdate(e);
        }


    }


}


******************相关辅助类代码:




package sc.emperor.ps.databasedemo;

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

/**
 * Created by purplesea on 2016/11/29 0029.
 */
@Table(name = "Employee_info")
public class Employee {
    @Column(name = "id", isId = true)
    private int id;
    @Column(name = "name")
    private String name;
    @Column(name = "sex")
    private String sex;
    @Column(name = "age")
    private int age;

    public Employee() {
    }

    public Employee(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", 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 String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值