最近在项目中用到了数据库的操作,项目完成后,在此记录一下使用xUtils框架数据库类的使用以及查看手机本地数据库内容的方法。
一:使用方法
1.添加依赖:
implementation 'org.xutils:xutils:3.3.40'
2.在全局变量中注册xUtils,并且获取数据库的管理器,通过此管理器对数据库进行增删改查(要注意的是全局变量需要在AndroidManifest中去添加属性)
全局变量设置方法超链接
public class BaseContext extends Application {
private static volatile Context mContext;
private static BaseContext instance;
public static BaseContext getInstance() {
return instance;
}
public void onCreate() {
super.onCreate();
//注册xUtils
x.Ext.init(this);
mContext = getApplicationContext();
instance = this;
}
public static Context getContext() {
return mContext;
}
/**
* @return 获得数据库的管理器,通过这个管理器对数据库进行增删改查
*/
public DbManager dbManager(){
DbManager.DaoConfig daoConfig = new DbManager.DaoConfig();
//设置数据库的名字
daoConfig.setDbName("image.db");
//设置数据库的版本号,默认为1
//daoConfig.setDbVersion(1);
return x.getDb(daoConfig);
}
}
3.数据库中需要有表,以及表中的参数,下面来设置
User类
//设置数据库表的名字
@Table(name = "imageinfo")
public class User {
@Column(name = "imageurl")
private String imageurl;
@Column(name = "imagetime")
private String imagetime;
@Column(name = "imagehashcode")
private String imagehashcode;
@Column(name = "imagehandle")
private String imagehandle;
@Column(name = "id", isId = true, autoGen = true)//注释列名主键,主动增长
private int id;
public String getImageurl() {
return imageurl;
}
public String getImagetime() {
return imagetime;
}
public String getImagehashcode() {
return imagehashcode;
}
public String getImagehandle() {
return imagehandle;
}
public void setImageurl(String imageurl) {
this.imageurl = imageurl;
}
public void setImagetime(String imagetime) {
this.imagetime = imagetime;
}
public void setImagehashcode(String imagehashcode) {
this.imagehashcode = imagehashcode;
}
public void setImagehandle(String imagehandle) {
this.imagehandle = imagehandle;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
@Column(name = "state")
private int state;
@NonNull
@Override
public String toString() {
return "{" +
"imageurl='" + imageurl + '\'' +
", id=" + id +
", imagetime='" + imagetime + '\'' +
", imagehashcode=" + imagehashcode +
", state=" + state +
", imagehandle='" + imagehandle + '\'' +
'}';
}
}
这样一个数据库在程序启动的时候就创建好了。
4.下面介绍对数据库的操作
(1)添加数据:
//将数据保存到数据库中
DbManager dbManager = BaseContext.getInstance().dbManager();
User user = new User();
user.setImageurl(address);
user.setImagetime(exifInterface.getAttribute(ExifInterface.TAG_DATETIME));
user.setImagehashcode(String.valueOf(objectInfo.hashCode()));
user.setImagehandle(String.valueOf(objectHandle));
user.setState(1);
dbManager.save(user);
(2)删除数据:
删除所有数据:
DbManager manager = BaseContext.getInstance().dbManager();
try {
manager.delete(User.class);
} catch (DbException e) {
e.printStackTrace();
}
删除指定数据:
//删除imageurl=1的数据
DbManager dbManager = BaseContext.getInstance().dbManager();
try {
dbManager.delete(User.class,WhereBuilder.b("imageurl","=","1"));
} catch (DbException e) {
e.printStackTrace();
}
删除指定id的数据:
DbManager dbManager = BaseContext.getInstance().dbManager();
try {
dbManager.deleteById(User.class,1);
} catch (DbException e) {
e.printStackTrace();
}
(3)修改数据:
//修改imageurl = address的state为3
try {
DbManager dbManager = BaseContext.getInstance().dbManager();
WhereBuilder whereBuilder = WhereBuilder.b();
whereBuilder.and("imageurl", "=", address);
dbManager.update(User.class, whereBuilder, new KeyValue("state", 3));
} catch (DbException e) {
e.printStackTrace();
}
(4)查找数据:
查找所有内容:
DbManager dbManager = BaseContext.getInstance().dbManager();
try {
List<User> all = dbManager.findAll(User.class);
for (int i = 0; i < all.size(); i++) {
Log.e("TAG", all.get(i).toString());//打印显示
}
} catch (DbException e) {
e.printStackTrace();
}
查找指定内容:
我这里查找imageurl=fileString与state=1的所有数据,查到后,将其添加到imagePaths中
DbManager dbManager = BaseContext.getInstance().dbManager();
List<User> imageMessage = null;
try {
imageMessage = dbManager.selector(User.class).where("imageurl", "=", fileString).and("state","=",1).findAll();
if (imageMessage == null || imageMessage.size() == 0){
continue;
}else {
User user = imageMessage.get(0);
String imageurl = user.getImageurl();
imagePaths.add(imageurl);
}
} catch (DbException e) {
e.printStackTrace();
}
(5)删除数据库:
DbManager dbManager = BaseContext.getInstance().dbManager();
try {
dbManager.dropDb();
} catch (DbException e) {
e.printStackTrace();
}
(6)删除表:
DbManager dbManager = BaseContext.getInstance().dbManager();
try {
dbManager.dropTable(User.class);
} catch (DbException e) {
e.printStackTrace();
}
(7)往表中添加新字段:
DbManager dbManager = BaseContext.getInstance().dbManager();
try {
dbManager.addColumn(User.class,"test");
} catch (DbException e) {
e.printStackTrace();
}
上面对于数据库的操作,大家大可以在项目中根据自己的需求写一个工具类,操作起来比较方便。
二:查看数据库内容
对于数据的查看,之前在网上找了一个软件(SQLiteStudio),附上下载地址,以及步骤。
链接:https://pan.baidu.com/s/1zCjK-qFEOcdUv13bXLBvkQ
提取码:ws6z
我的Android Studio版本为3.5.2。
保证你的手机有保存的数据库,将手机连接到电脑。
(1)点击右侧的Device File Explorer
依次打开data-data-应用包名
右键点击image.db(image为你设置的数据库名字),点击Save As…将其保存在电脑上。
(2)将下载的SQLiteStudio进行解压,找到
打开,点击左上角数据库-添加数据库(快捷键Ctrl+O),出现如下界面
选择你下载的后缀名为db的数据库,点击Ok将其打开。
(3)
这里的imageinfo为保存的数据库的表名,双击在右侧即可查看数据库内容