上一次写到的图像加载,这次中间间隔的时间稍微长了一些,先对大家报个歉。说实话,差点把这个事情给忘了。
亏得朋友的提醒,只顾整理忘记发了,真是罪过罪过。今天给大家分享的是在开源框架中的有关数据库的框架。
数据库这个东西了解后端的小伙伴都知道,对程序的来说是相当重要。因为数据是无价的,虽然现在有云存储,但是数
据库这一关是躲不过去了。大家经常听到的mysql,sqlserver,DB2,Oracle等一些知名的数据库在各行各业应用非常广泛。
在我们android系统中自带的轻量级的sqlite数据库,作为移动端来说,足够使用了。比较其他的确实用不了,手机内存就那么
大,我们还要存储我们宝贵的各种资源,确实装不下。
使用数据库最痛苦的事情,大概就是写sql语句,还好我们的一般都是简单的CRUD,并且涉及的表都是比较简单的,要是跟
后台一样,嵌套查询能写一页,我估计android里面涉及的数据库的部分的需求都要被改了。
现在来介绍一下,本人了解的一些数据库框架和一些用法,有什么错误的或者好的框架请各位朋友留言,不吝赐教一下
4.1数据库_ormlite
主页:http://ormlite.com/(这个貌似需要翻墙)
*配置: 添加以下依赖
compile 'com.j256.ormlite:ormlite-android:4.48'
compile 'com.j256.ormlite:ormlite-core:4.48'
用途: 操作数据库
使用步骤
1.创建数据库表结构的实体类.示例代码:
@DatabaseTable(tableName = "user")
public class User {
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(columnName = "name")
private String name;
@DatabaseField(columnName = "age")
private int age;
@DatabaseField(columnName = "tel")
private String tel;
public User() {
}
public User(String name, int age, String tel) {
this.name = name;
this.age = age;
this.tel = tel;
}
}
2.创建OrmLiteSqliteOpenHelper的实现类.示例代码:
public class UserDBOpenHelper extends OrmLiteSqliteOpenHelper {
public UserDBOpenHelper(Context context) {
super(context, "user.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
// 创建表
TableUtils.createTable(connectionSource, User.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
// 更新表
TableUtils.dropTable(connectionSource, User.class, true);
onCreate(database, connectionSource);
} catch (SQLException e) {
e.printStackTrace();
}
}
private static UserDBOpenHelper instance;
public static synchronized UserDBOpenHelper getInstance(Context context) {
if (instance == null) {
synchronized (UserDBOpenHelper.class) {
if (instance == null) {
instance = new UserDBOpenHelper(context);
}
}
}
return instance;
}
private Dao dao;
// 获取操作数据库的DAO
public Dao getUserDao() throws SQLException {
if (dao == null) {
dao = getDao(User.class);
}
return dao;
}
@Override
public void close() {
super.close();
dao = null;
}
}
3.获取数据库的DAO对象, 即可进行增删改查的操作.示例代码:
UserDBOpenHelper helper = new UserDBOpenHelper(this);
Dao dao = helper.getUserDao();
User user = new User("zhangsan", 12, "13212345678");
// 增
dao.create(user);
// 改
dao.updateRaw("update user set tel = '18882348888' where name = ?", new String[]{"王武"});
// 查
List query = dao.queryForEq("name", "王武");
// 删
dao.deleteById(2);
4.2数据库_greenDAO(这个使用频率比较高)
主页:https://github.com/greenrobot/greenDAO
配置: 添加以下依赖
官方文档最新的配置
优点:
性能最大化,内存开销最小化
易于使用的API
为Android进行高度优化
使用步骤
1.创建自定义的DAOGenerater,指定数据库相关配置并生成相关类
public class CustomDAOGenerater {
public static void main(String[] args) throws Exception {
// 第一个参数为数据库版本
//第二个参数为数据库的包名
Schema schema = new Schema(1, "com.alpha.db");
// 创建表,参数为表名
Entity entity = schema.addEntity("Info");
// 为表添加字段
entity.addIdProperty();// 该字段为id
entity.addStringProperty("name");// String类型字段
entity.addIntProperty("age");//Int类型字段
entity.addStringProperty("tel");// String类型字段
// 生成数据库相关类
//第二个参数指定生成文件的本次存储路径,AndroidStudio工程指定到当前工程的java路径
new DaoGenerator().generateAll(schema, "C:\\Users\\Alpha\\AndroidStudioProjects\\GreenDaoDemo\\app\\src\\main\\java");
}
}
2.在Application中通过DaoMaster.DevOpenHelper初始化数据库
// 该初始化过程最好放在Application中进行,避免创建多个Session
private void setupDatabase() {
// 通过 DaoMaster 的内部类 DevOpenHelper创建数据库
// 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表
// 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
/**
* @param context : Context
* @param name : 数据库名字
* @param factory : CursorFactroy
*/
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "student.db", null);
// 获取数据库
SQLiteDatabase database = helper.getWritableDatabase();
// 获取DaoMaster
DaoMaster daoMaster = new DaoMaster(database);
// 获取Session
DaoSession daoSession = daoMaster.newSession();
// 获取对应的表的DAO对象
InfoDao dao = daoSession.getInfoDao();
}
3.获取数据库的DAO对象,即可进行增删改查的操作
// 增
dao.insert(new Info(null, "zhangsan", 12, "13112345678"));
// 删
dao.deleteByKey(1L);
// 改
Info info = new Info(3L, "赵琦", 78, "18812348888");
dao.update(info);
// 查
QueryBuilder builder = dao.queryBuilder();
builder.where(InfoDao.Properties.Name.eq("lisi"));
Query build = builder.build();
List list = build.list();
4.3数据库_Litepal
主页 :https://github.com/LitePalFramework/LitePal(这个文档写的很全)
中文文档地址: http://blog.csdn.net/sinyu890807/article/category/2522725(感觉英文别扭的可以看一下分享的博客)
4.4 数据库_android-lite-orm(国内大神写的,用着挺好用)
主页:https://github.com/litesuits/android-lite-orm
1.创建数据库
文档上解释:
一个数据库对应一个LiteOrm的实例,如果一个App只有一个数据库,那么LiteOrm应该是全局单例的。 如果多次新建LiteOrm实例,系统会提示你应该关闭之前的数据库,也可能会引起其他未知错误。
2.建表逻辑
该框架会在你新建一个model的时候,自动的为你创建一个表,作为使用者的我们,直接操作对象即可。相当于就是建表语句
不过这样做,操作更高效
LiteOrm将为开发者建一个名为“test_model”的数据库表,其字段为:id name login。 建表语句:CREATE TABLE IF NOT EXISTS test_model (id INTEGER PRIMARY KEY AUTOINCREMENT ,name TEXT, login TEXT DEFAULT true)。
3.数据库的一些CRUD操作
这个数据库框架是国内的大神的写的,简单易操作。集成非常简单,有兴趣的可以参照示例,与之前介绍的框架相比,这个框架
算是最简单的一个,也是文档介绍比较全面的一个,总的来说简单易懂易集成。
以上就是关于android数据库框架的内容,数据库这个东西说重要吧,确实重要,但是作为客户端的我们确实平常使用频率
非常之低,而不像后台基本上做一个东西都要跟其深入交流一下,不过作为知识的拓展多了解一些,对我们将来的发展还是很有
帮助的。上面的资料大部分都是实践过的,如果有什么不对的地方,请各位朋友及时的指出来,不吝赐教。