ActiveAndroid
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()); } } } }
执行结果为: