上一次写到的图像加载,这次中间间隔的时间稍微长了一些,先对大家报个歉。说实话,差点把这个事情给忘了。
亏得朋友的提醒,只顾整理忘记发了,真是罪过罪过。今天给大家分享的是在开源框架中的有关数据库的框架。
数据库这个东西了解后端的小伙伴都知道,对程序的来说是相当重要。因为数据是无价的,虽然现在有云存储,但是数
据库这一关是躲不过去了。大家经常听到的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路径 newDaoGenerator().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数据库框架的内容,数据库这个东西说重要吧,确实重要,但是作为客户端的我们确实平常使用频率
非常之低,而不像后台基本上做一个东西都要跟其深入交流一下,不过作为知识的拓展多了解一些,对我们将来的发展还是很有
帮助的。上面的资料大部分都是实践过的,如果有什么不对的地方,请各位朋友及时的指出来,不吝赐教。
简书地址:https://www.jianshu.com/p/753e7d9acae4