ActiveAndroid是一个轻量级的数据库框架,它会使用自增长的ID作为主码,只需要配置一下,就可以很方便的使用了。
1.首先引入jar包
项目地址为https://github.com/pardom/ActiveAndroid
2.建表
以User表为例,包含userId、name、sex、age四个属性,具体代码如下
@Table(name = "User")
public class User extends Model{
@Column(name = "userId")
private String userId;
@Column(name = "name")
private String name;
@Column(name = "sex")
private String sex;
@Column(name = "age")
private int age;
public User(){ }
public User(String userId,String name, String sex, int age) {
this.userId = userId;
this.name = name;
this.sex = sex;
this.age = age;
}
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;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String toString(){
return "userId:"+userId+"姓名:"+name+",性别:"+sex+",年纪"+age;
}
}
继承自Model类,@Table(name = "User") 表示表名,@Column(name = "userId")表示列名。
注意:必须要实现无参构造函数。
3.初始化
Configuration.Builder builder = new Configuration.Builder(this);
builder.addModelClass(User.class);
ActiveAndroid.initialize(builder.create());
其中,this指针是Context类型。
4.操作
这样就可以对数据库进行操作了,首先来看一下对User进行操作的封装类
public class UserModel {
public List<User> getAllUser(){
try{
return new Select().from(User.class).execute();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public List<User> getAllUser(String orderBy,boolean isAsc){
try{
String ascOrNot = (isAsc==true)?" asc":" desc";
return new Select().from(User.class).orderBy(orderBy+ascOrNot).execute();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public void save(List<User> list){
for(User u : list){
u.save();
}
}
public void save(User user){
user.save();
}
public void delete(User user){
new Delete().from(User.class).where("userId = ?",user.getUserId()).execute();
}
public List<User> findByProperty(String property,Object value){
try{
return new Select().from(User.class).where(property+"=?",value).execute();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
UserModel封装了对于User的一些操作,包括save、delete、find等。
具体操作也跟SQL代码很像,比如查找所有的age = 18的User,
SQL代码:select * from User where age = 18 ;
ActiveAndroid代码:new Select().from(User.class).where(“age = ?”,18).execute() ;
5.demo
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button saveBtn;
private Button readBtn;
private UserModel userModel;
private User u1,u2,u3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化配置
Configuration.Builder builder = new Configuration.Builder(this);
builder.addModelClass(User.class);
ActiveAndroid.initialize(builder.create());
saveBtn = (Button) findViewById(R.id.save_btn);
readBtn = (Button) findViewById(R.id.read_btn);
saveBtn.setOnClickListener(this);
readBtn.setOnClickListener(this);
u1 = new User("1","张三","男",18);
u2 = new User("2","李四","男",19);
u3 = new User("3","王五","男",20);
userModel = new UserModel();
}
@Override
public void onClick(View v) {
if(v == saveBtn){
u1.save();
u2.save();
u3.save();
}else if (v == readBtn){
Log.i("Main","所有的列表项");
List<User> list = userModel.getAllUser();
for(User u : list){
Log.i("Main",u.toString());
}
Log.i("Main","找年龄19的项");
List<User> list1 = userModel.findByProperty("age",19);
for(User u : list1){
Log.i("Main",u.toString());
}
Log.i("Main","按照年龄倒序");
List<User> list2 = userModel.getAllUser("age",false);
for(User u : list2){
Log.i("Main",u.toString());
}
Log.i("Main","删除张三之后,所有的列表项");
userModel.delete(u1);
List<User> list3 = userModel.getAllUser();
for(User u : list3){
Log.i("Main",u.toString());
}
}
}
}
执行结果为: