在android studio中添加依赖
compile 'nl.qbusict:cupboard:2.1.4'
用法
需要在数据库中存放的实体类
Book类:
public class Book {
//必须要有一个无参方法才可以
public Book(){
}
public Book(Long _id, String title) {
this._id = _id;
this.title = title;
}
public Long _id;
public String title;
public Author author;
public Date publishDate;
}
Author类:
public class Author {
//_id的不可缺少
public long _id;
public String name;
public int age;
public String sex;
}
使用SQLiteOpenHelper创建一个数据库
public class CupboardSQLiteOpenHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "book.db";
private static final int DATABASE_VERSON = 1;
static{
//注册我们的实体类
//静态导入了CupBoardFactory 所以可以直接使用里面的静态方法
//之所以使用静态注册的方式 是因为 在类加载的时候就能在数据库中使用这两个实体类
cupboard().register(Book.class);
cupboard().register(Author.class);
}
public CupboardSQLiteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSON);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
cupboard().withDatabase(sqLiteDatabase).createTables();//创建表的名字 注册几个实体类 就有几个表吧
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
cupboard().withDatabase(sqLiteDatabase).upgradeTables();//更新表
}
}
代码中使用了cupboard 这是在创建数据库的过程中 为这个数据库注入什么样的实体类
不理解的搜一些SQLiteOpenHelper的教程 了解一下用法就可
数据库的用法
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CupboardSQLiteOpenHelper helper = new CupboardSQLiteOpenHelper(this);//第一次创建的时候会创建数据库 就是会走helper的onCreate方法
SQLiteDatabase database = helper.getWritableDatabase();
Book b1 =new Book(1L,"红楼梦");
Book b2 = new Book(2L,"三国演义");
Book b3 = new Book(3L,"水浒传");
Book b4 = new Book(4L,"西游记");
cupboard().withDatabase(database).put(b1);
cupboard().withDatabase(database).put(b2);
cupboard().withDatabase(database).put(b3);
cupboard().withDatabase(database).put(b4);
//查询 id为2L的书
Book book = cupboard().withDatabase(database).get(Book.class,2L);
Log.i("TAG",book.title);
//获取到默认是第一本
Book firstBook = cupboard().withDatabase(database).query(Book.class).get();
Log.i("TAG",firstBook.title);
Cursor cursor = cupboard().withDatabase(database).query(Book.class).getCursor();
//游标的操作
QueryResultIterable<Book> itr = cupboard().withDatabase(database).query(Book.class).query();
for(Book temp:itr){
Log.i("TAG","temp"+temp.title);
}
itr.close();//用完需要关闭
// cupboard().withDatabase(database).put();//如果更新某一个实体类 知道他的id就可全部鞥更新
ContentValues values = new ContentValues();
values.put("title","红楼梦");//新的字段
cupboard().withDatabase(database).update(Book.class,values,"title = ?","水浒传"); //替换为 新的字段 where titile = 水浒传
QueryResultIterable<Book> itr2 = cupboard().withDatabase(database).query(Book.class).query();
for(Book temp:itr2){
Log.i("TAG","temp"+temp.title);
}
itr.close();//用完需要关闭
cupboard().withDatabase(database).delete(Book.class,1L);//删除id是1L的实体类
cupboard().withDatabase(database).delete(new Book(3L,"西游记"));//根据id删除的
cupboard().withDatabase(database).delete(Book.class,"title = ?","红楼梦");//删除操作 where
Log.i("TAG","temp");
QueryResultIterable<Book> itr3 = cupboard().withDatabase(database).query(Book.class).query();
for(Book temp:itr3){
Log.i("TAG","temp"+temp.title);
}
itr.close();//用完需要关闭
ContentValues values1 = cupboard().withEntity(Book.class).toContentValues(b1);
Log.i("TAG","temp1"+values1.getAsString("title"));
//读一次数据库进行多次操作
DatabaseCompartment dbc = cupboard().withDatabase(database);
dbc.put(new Book());
ContentValues vl = new ContentValues();
values.put("title","红楼梦");//新的字段
cupboard().withDatabase(database).update(Book.class,vl,"title = ?","水浒传");
}
}
总的来说没有复杂的操作和难以理解的地方,对于我来说使用到的业务逻辑完全够用了,而且轻量级,工具不在于老旧 关键在于稳定和业务的实现的吧~