浅谈Android数据库DBFlow
一、项目配置
1、根目录下的build.gradle 中添加
maven { url "https://www.jitpack.io" }
如下:
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
如下:
2、app目录下的build.gradle 中添加
apply plugin: 'com.neenbedankt.android-apt'
def dbflow_version = "4.0.2"
依赖:
apt "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"
compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}"
compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}"
// sql-cipher database encyrption (optional)
compile "com.github.Raizlabs.DBFlow:dbflow-sqlcipher:${dbflow_version}"
3、创建自己的Application
public class XApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
FlowManager.init(this);
}
}
清单文件配置:
二、使用
1、创建一个数据库类
/**
* @author xqx
* @email djlxqx@163.com
* blog:http://www.cnblogs.com/xqxacm/
* createAt 2017/11/22
* description: 数据库类
*/ @Database(name = SchoolDatabase.Name , version = SchoolDatabase.VERSION)
public class SchoolDatabase {
static final String Name = "SchoolDB"; //数据库名
static final int VERSION = ; //数据库版本号
}
2、创建一个表类
/**
* @author xqx
* @email djlxqx@163.com
* blog:http://www.cnblogs.com/xqxacm/
* createAt 2017/11/22
* description: 学生表 属于SchoolDatabase数据库的
*/ @Table(database = SchoolDatabase.class)
public class Student extends BaseModel{
//主键 一个表必须有至少一个主键
// (autoincrement = true) 表示该字段是自增的,可以不设置 ,默认false
@PrimaryKey(autoincrement = true)
long id ; // 名字
@Column
String name; // 年龄
@Column
int age; //---------------------以下为可有可无的---------------//
//注意 一定要有一个无参的构造方法
public Student() {
}
/**
* 构造方法 看情况添加 可不加
* @param name
* @param age
*/
public Student(String name, int age) {
this.name = name;
this.age = age;
} //Getter 和 Setter 方法,自己添加、可有可无
public long getId() {
return id;
} public void setId(long 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;
}
}
3、增删改查
Student student = new Student();
student.setName("XQX");
student.setAge();
student.save(); //保存 student.update(); // 更改
student.delete(); //删除
student.insert(); // 添加
查询:
/**
* 查询年龄为100的学生记录
* @param age
* @return
*/
public Student findSingleStudent(int age){
Student student = SQLite.select().from(Student.class).where(Student_Table.age.is()).querySingle();
return student;
} public List getAllStudents(){
List<Student> students = SQLite.select().from(Student.class).queryList();
return students;
}
测试:
for (int i = ; i < ; i++) {
addStudent("学生:"+i , i);
} List<Student> students = SQLite.select().from(Student.class).queryList(); for (int i = ; i < ; i++) {
Log.i("xqxinfo","学生表中的所有记录:"+students.get(i).toString());
}
结果:
注意:如果一个表中的对象没有的话,save等同于insert都是添加记录
如果这个对象在表中存在,save即更新,不是添加
浅谈Android数据库DBFlow的更多相关文章
- sqlite升级--浅谈Android数据库版本升级及数据的迁移
Android开发涉及到的数据库采用的是轻量级的SQLite3,而在实际开发中,在存储一些简单的数据,使用SharedPreferences就足够了,只有在存储数据结构稍微复杂的时候,才会使用数据库来 ...
- 浅谈Android保护技术__代码混淆
浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为.将代码中的各种元 ...
- 浅谈Android应用保护(一):Android应用逆向的基本方法
对于未进行保护的Android应用,有很多方法和思路对其进行逆向分析和攻击.使用一些基本的方法,就可以打破对应用安全非常重要的机密性和完整性,实现获取其内部代码.数据,修改其代码逻辑和机制等操作.这篇 ...
- 安卓开发_浅谈Android动画(四)
Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ...
- 浅谈Android应用性能之内存
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/ jaunty [博主导读]在Android开发中,不免会遇到许多OOM现象,一方面可能是由于开 ...
- 浅谈Android五大布局
Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ...
- [转]浅谈Android五大布局(二)——RelativeLayout和TableLayout
在浅谈Android五大布局(一)中已经描述了LinearLayout(线性布局).FrameLayout(单帧布局)和AbsoulteLayout(绝对布局)三种布局结构,剩下的两种布局Relati ...
- [转]浅谈Android五大布局(一)——LinearLayout、FrameLayout和AbsoulteLayout
Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ...
- 浅谈Android Studio3.0更新之路(遇坑必入)
>可以参考官网设置-> 1 2 >> Fantasy_Lin_网友评论原文地址是:简书24K纯帅豆写的我也更新一下出处[删除]Fa 转自脚本之家 浅谈Android Studi ...
随机推荐
- 怎样在一个HTML中嵌入另一个HTML页面(iframe标签用法)
iframe 怎么 在一个网页中嵌入另一个网页呢,我们可以用html中的iframe标签搞定. iframe支持所有浏览器.下面来看语法: <iframe src="规定在 ifram ...
- 插入排序-Python与PHP实现版
插入排序Python实现 import random a=[random.randint(1,999) for x in range(0,36)] # 直接插入排序算法 def insertionSo ...
- bootstrap的模态简单案例
使用时需添加bootstrap的引用,否则实现不出来效果 <!DOCTYPE html> <html><head> <meta name="v ...
- Python 爬虫练习(二)爬取补天公益SRC厂商域名URL (2017年11月22日)
介绍下: 补天是国内知名的漏洞响应平台,旨在企业和白帽子共赢. 白帽子在这里提交厂商漏洞,获得库币和荣誉,厂商从这里发布众测.获取漏洞报告和修复建议. 在2017年3月份之前,补天的厂商域名URL是非 ...
- [欧拉路径]Play on Words UVA10129
传送门: UVA - 10129 题目大意: 给定一些单词(可能会重复出现),判断单词是否能排成一个序列,前提是单词的最后一个字母与下一个单词的第一个字母相同.输出"The door c ...
- input取值区间实例
前端开发中经常会遇到 input 取值区间的需求,比如搜索的时候,价格区间,积分值区间 大致的需求为 input 的值必须是正整数,第二个 input 的值必须大于第一个 DOM结构如下: <d ...
- asp.net core 实现一个简单的仓储
一直有自己写个框架的想法,但是一直没有行动起来,最近比较闲,正好可以开工了. 现在已经完成了两部分.1.一个简单仓储,实现使用的是ef 2.IOC部分,这里是把内置的ioc替换成了aotofac,这部 ...
- SpringMvc架构下css、js、jpg加载失败问题
SpringMvc架构下css.js.jpg加载失败问题 springMvc搭建成功后,页面出现一些错误,jsp.js等静态资源加载失败.导致页面没有显示任何样式以及 此处原因很简单,是因为相对路径在 ...
- 创建一个servlet
servlet: 它是web应用程序的核心类,可以直接处理和相应用户请求,又或者将处理工作委托给应用中的其他部分的类. 让servlet继承HttpServlet的原因是: 1.HttpServlet ...
- 基于DevExpress的BandedGridView动态生成多行(复合)表头
最近cs项目中有个看板的功能需求,整个系统是基于DevExpress组件开发的,由于对这个组件的布局不是很熟,也借鉴了网上一些其他人的做法,普遍都是通过GridControl的BandedGridVi ...