Xutils3 数据库模块的使用方法
来源:互联网 发布:苹果恢复大师注册码mac 编辑:程序博客网 时间:2024/06/05 00:51
1.开源地址
https://github.com/wyouflf/xUtils3/tree/master
2.导入工程
使用Gradle构建时添加一下依赖即可:
compile 'org.xutils:xutils:3.3.36'
3.使用步骤
- 使用XUtils3的一系列初始化。
- 创建一个javaBean类,该类即是需要存储的数据,在数据库中的表。
- 调用x.getDb方法获取DbManager对象
- 使用DbManager对象进行CRUD.
初始化XUtils3
在Application的onCreate方法中加入如下代码
//xUtils3初始化 x.Ext.init(this); //是否打开log x.Ext.setDebug(true);
添加权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.INTERNET" />
建立数据库的表(JavaBean)
1.在类名上面加入@Table标签,标签里面的属性name的值就是以后生成的数据库的表的名字
2.实体bean里面的属性需要加上@Column标签,这样这个标签的name属性的值会对应数据库里面的表的字段。
3.实体bean里面的普通属性,如果没有加上@Column标签就不会在生成表的时候在表里面加入字段。
4.实体bean中必须有一个主键,如果没有主键,表以后不会创建成功,@Column(name=”id”,isId=true,autoGen=true)这个属性name的值代表的是表的主键的标识,isId这个属性代表的是该属性是不是表的主键,autoGen代表的是主键是否是自增长,如果不写autoGen这个属性,默认是自增长的属性。
/**
* Created by Administrator on 2016/7/8.
* 数据库存储 表 的实体类
* 在类名上加上@Table标签,标签里面的name就是以后生成数据库的表的表名。
* 实体bean里面的属性,如果没有加上@Column,在生成表的时候,就不会在表里面加上该字段,反之亦然。
*/
@Table(name= "Parent")
public class Parent {
//id
@Column(name= "id",isId =true, autoGen= true)
private intid;
//姓名
@Column(name= "name")
privateString name;
//年龄
@Column(name= "age")
private intage;
//性别
@Column(name= "sex")
privateString sex;
//工资
@Column(name= "salary")
privateString salary;
public int getId() {
returnid;
}
public voidsetId(intid) {
this.id= id;
}
publicString getName() {
returnname;
}
public voidsetName(String name) {
this.name= name;
}
public intgetAge() {
returnage;
}
public voidsetAge(intage) {
this.age= age;
}
publicString getSex() {
returnsex;
}
public voidsetSex(String sex) {
this.sex= sex;
}
publicString getSalary() {
returnsalary;
}
public voidsetSalary(String salary) {
this.salary= salary;
}
@Override
publicString toString() {
return"[id=" + getId() +",name="+ getName() + ",age="+ getAge()
+ ",sex="+ getSex() + ",salary="+ getSalary() +"}\n";
}
}
获取DBManager对象
DbManager db = x.getDb(DaoConfig daoConfig);
获取DbManager需要一个daoConfig对象。
注意:数据库里面表的创建的时间,只有在你对数据库里面的操作涉及到这张表的操作时,会先判断当前的表是否存在,如果不存在,才会创建一张表,如果存在,才会进行相应的CRUD操作,但是只要我们想进行一张表的CRUD操作,我们必须先执行上面的步骤,通俗点说就是必须拿到一个Dbmanger这个对象。
daoCinfig对象主要用于对于数据库的一些初始化设置
1.setDbName 设置数据库的名称
2.setDbDir 设置数据库存放的路径
3.setDbVersion 设置数据库的版本
4.setAllowTransaction(true) 设置允许开启事务
5.setDbUpgradeListener 设置一个版本升级的监听方法
public classDbConfig {
private staticDbManager.DaoConfig daoConfig;
public static DbManager.DaoConfiggetDaoConfig(){
File file = newFile(Environment.getExternalStorageDirectory().getPath());
if(daoConfig== null){
daoConfig= newDbManager.DaoConfig()
.setDbName("xiaoxiao.db") //设置数据库的名字
// .setDbDir(file) //设置数据库存储的位置
.setDbVersion(1) //设置数据的版本号
.setAllowTransaction(true) //设置是否允许开启事务
.setDbUpgradeListener(newDbManager.DbUpgradeListener() {//设置一个数据库版本升级的监听
@Override
public voidonUpgrade(DbManager db, intoldVersion, intnewVersion) {
}
});
}
returndaoConfig;
}
}
通过DbManager这个类我们知道主要它做了以下几件事情:
1.getDaoConfig 获取数据库的配置信息
2.getDatabase 获取数据库实例
3.saveBindingId saveOrUpdate save 插入数据的3个方法(保存数据)
4.replace 只有存在唯一索引时才有用 慎重
5.delete操作的4种方法(删除数据)
6.update操作的2种方法(修改数据)
7.find操作6种方法(查询数据)
8.dropTable 删除表
9.addColumn 添加一列
10.dropDb 删除数据库
添加数据
插入数据有三个方法
Save 插入数据
saveOrUpdate 插入数据,与save的区别:当一个实体里面的主键一样时如果使用saveOrUpdate会将当前主键对应的这条数据进行替换,而如果你使用了save就会报错。
saveBindingId 使用saveBindingId保存实体时会为实体的id赋值
/**
* 存储Parent到数据库
* @paramparent 需要存储的对象
* @return
*/
public boolean insertParent(Parent parent) {
try{
returndbManager.saveBindingId(parent);
}catch (DbException e) {
e.printStackTrace();
}
return false;
}
查找数据
1.findById
通过主键的值来查找表里的数据
/**
* 根据数据的唯一标识ID查找数据
* @paramentityType 需要查询的表
* @paramid
*@param <T>
*@return
*/
public <T>T findByIdParent(Class<T> entityType,String id){
try{
returndbManager.findById(entityType,id);
}catch (DbException e) {
e.printStackTrace();
}
return null;
}
2.findFirst
返回表里的第一条数据
/**
* 返回给定表的第一条数据
* @paramentityType
*@param <T>
*@return
*/
public <T>T findFirstParent(Class<T> entityType){
try{
returndbManager.findFirst(entityType);
}catch (DbException e) {
e.printStackTrace();
}
return null;
}
3.findAll
返回给定表的所有数据
/**
* 查询给定表的所有数据
* @paramentityType
*@param <T>
*@return
*/
public <T> List<T>findAllParent(Class<T> entityType){
try{
returndbManager.findAll(entityType);
}catch (DbException e) {
e.printStackTrace();
}
return null;
}
4.Selector
返回指定条件查询出的数据
/**
* 根据age和sex查询所有符合条件的Patent
* @paramentity
*@param Age
*@param sex
*@param <T>
*@return
*/
public <T> List<T>selectByAgeAndSex(Class<T> entity, intAge,String sex){
try{
returndbManager.selector(entity).where("age",">",Age).and("sex","=",sex).findAll();
}catch (DbException e) {
e.printStackTrace();
}
return null;
}
下面两个方法主要使用sql语句查询数据:
该方法返回一个DbModel对象,该对象以hashMap的方式存储查询结构,即:key为表的字段,value为记录的值 例: key:name value:小丽
下面是DbModel的部分源码:
5.findDbModelFirst
返回sql语句查询到的第一条结果
/**
* 根据给定sql语句返回查询到的第一条数据
* @paramsql sql语句
* @return
*/
public DbModelfindDbModelFirst(String sql){
try{
returndbManager.findDbModelFirst(newSqlInfo(sql));
}catch (DbException e) {
e.printStackTrace();
}
return null;
}
DbModel dbModel =dbHelper.findDbModelFirst("select * from Parent");
if(dbModel !=null){
mTextView.setText(dbModel.getString("name"));
}
6.findDbModelAll
返回sql语句查询到的所有结果
/**
* 根据给定sql语句返回查询到的所有数据
* @paramsql
*@return
*/
public List<DbModel>findDbModelAll(String sql){
try{
returndbManager.findDbModelAll(newSqlInfo(sql));
}catch (DbException e) {
e.printStackTrace();
}
return null;
}
List<DbModel> dbModelList =dbHelper.findDbModelAll("select * from Parent where age > 24");
StringBuilder builder = newStringBuilder();
if(dbModelList !=null){
for(DbModel dbModel : dbModelList){
builder.append(dbModel.getString("name") +"\n");
}
mTextView.setText(""+ builder.toString());
}
输出结果:
修改操作
1.修改单条数据的某个字段或多个字段。
Update第一个参数是需要修改的实体
第二个参数是一个可变参数,是你需要修改的字段的name。
/**
* 修改第一条数据的值
*/
public void update(){
//将id为1的这条记录的数据的age修改为30,name修改为“张三丰”
try{
Parent parent = dbManager.findById(Parent.class,1);
parent.setAge(30);
parent.setName("张三丰");
dbManager.update(parent,"name","age");
}catch (DbException e) {
e.printStackTrace();
}
}
2.修改符合条件的数据的对应字段。
keyValue是一个键值对对象,第一个参数为字段名,第二个参数为需要修改成的值
whereBuilder.b 为需要修改数据的条件,符合的数据都会被修改。
public voidupdate2(){
//将parent表中的性别为man的工资salasy都变为6000
KeyValue keyValue =new KeyValue("salary","6000");
try {
dbManager.update(Parent.class,WhereBuilder.b("sex","=","men"),keyValue);
}catch (DbException e) {
e.printStackTrace();
}
}
结果
删除操作
1.deleteById
根据指定的主键来删除对应的一条数据
/**
* 根据主键进行单条数据的删除
* @paramentity
*@param id
*/
public void deleteById(Class entity,String id){
try{
dbManager.deleteById(entity,id);
}catch (DbException e) {
e.printStackTrace();
}
}
2.delete(Object entity)
根据具体的实体对象来删除数据
/**
*根据实体bean来删除数据
*/
public void deleteObject(){
try{
Parent parent = dbManager.findFirst(Parent.class);
dbManager.delete(parent);
}catch (DbException e) {
e.printStackTrace();
}
}
3.delete(Class<?> entityType)
删除指定表的所有数据,注意:删除的是数据,表还是存在的。
/**
* 删除表里的所有数据
* 注意:表还是会存在,只是数据没了
*/
public void deleteTableAllTate(){
try{
dbManager.delete(Parent.class);
}catch (DbException e) {
e.printStackTrace();
}
}
4.delete(Class<?> entityType, WhereBuilder whereBuilder)
根据where语句删除数据
/**
* 根据where语句进行删除操作
*/
public void delteWhere(){
//删除sex=men, salary=6000的数据
try{
dbManager.delete(Parent.class,
WhereBuilder.b("sex","=","men").and("salary","=","6000"));
}catch (DbException e) {
e.printStackTrace();
}
}
5.dropTable(Class<?> entityType)
删除表
/**
* 删除指定的表
*/
public void dropTable(){
try{
dbManager.dropTable(Parent.class);
}catch (DbException e) {
e.printStackTrace();
}
}
6.dropDb()
删除数据库
/**
* 删除数据库
*/
public void dropDb(){
try{
dbManager.dropDb();
}catch (DbException e) {
e.printStackTrace();
}
}
给表增加字段
需求:我们需要在parent表中添加一个country字段。
步骤:
1.在parent类中添加country属性
2.调用dbManager.addColumn(Parent.class,"country");方法添加字段
3.在DbManager.DaoConfig()中的版本号+1,是否必须未知。
//国家
@Column(name= "country",property= "中国")
private Stringcountry ="";
/**
* 添加country字段
*/
public void addColumn(){
try{
dbManager.addColumn(Parent.class,"country");
}catch (DbException e) {
e.printStackTrace();
}
}
public synchronized staticDbHelper getInstance(){
if(dbManager== null){
dbHelper= newDbHelper();
}
if(dbManager== null){
DbManager.DaoConfig daoConfig = DbConfig.getDaoConfig();
dbManager= x.getDb(daoConfig);
}
dbHelper.addColumn();
return dbHelper;
}
- Xutils3 数据库模块的使用方法
- Xutils3的数据库模块
- XUtils3框架的数据库模块的讲解
- xutils3数据库模块的简单应用
- Xutils,Xutils3的使用方法
- xutils3的详细使用方法
- XUtils3框架的基本使用方法
- xUtils3数据库的使用
- xUtils3数据库模块分析之数据篇
- xUtils3.0使用介绍:数据库模块
- xUtils3.0使用介绍:数据库模块
- Android xUtils3源码解析之数据库模块
- Android xUtils3源码解析之数据库模块
- xutils3使用方法
- xutils3使用方法
- Xutils3关于数据库的操作
- 记一次使用xutils3的数据库模块的教训org.xutils.ex.DbException: <init> []
- XUtils3框架的基本使用方法(一)
- 异常面试题
- 使用java RMI的步骤
- Apache DbUtils使用
- 堆排序
- 多线程面试题
- Xutils3 数据库模块的使用方法
- 重启Tomcat后还是登录状态
- Java虚拟机面试题
- 图解Linux命令之--more命令
- 手机设备端口9006刷回9008救砖步骤
- 一个字符串包含另一个字符串
- Contiki开发4:基于DEMO移植Contiki
- 二叉树的常见算法1
- AIDL记录