热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android数据库框架ORMLite的学习笔记

在开发APP过程中,难免会用到数据库。而Android现主要使用SQLite数据库,这里就不对SQLite做介绍了。但SQLite的数据库操作语句难免有些繁琐,而ORMLite框架很好的

       在开发APP过程中,难免会用到数据库。而Android现主要使用SQLite数据库,这里就不对SQLite做介绍了。但SQLite的数据库操作语句难免有些繁琐,而ORMLite框架很好的简化了SQLite的操作语句,所以我给大家介绍一下ORMLite的简单使用方法。使用的IDE是AndroidStudio。

    第一步:集成ORMLite的jar,在gradle中添加

                  compile 'com.j256.ormlite:ormlite-android:4.48'
                  compile 'com.j256.ormlite:ormlite-core:4.48'

    第二步:创建自己的Bean类

@DatabaseTable(tableName = "tb_personal")          //创建的表名
public class PersonanlBean {
@DatabaseField(generatedId = true) //id为主键且自动生成
    private int id;
@DatabaseField(columnName = "personal_name") //列名为persinal_name
private String name;
@DatabaseField(columnName = "personal_desc")
private String desc;

public PersonanlBean() {

}
public PersonanlBean(String name,String desc) {
this.name = name;
this.desc = desc;
}
    //利用快捷键快速生成setter、getter方法    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getDesc() {        return desc;    }    public void setDesc(String desc) {        this.desc = desc;    }}
    第三步 编写DAO类,主要是获取DAO对象,这里我们需要继承OrmLiteSqliteOpenHelper,下面的方法中都要做SQLException处理

public class DaoHelp extends OrmLiteSqliteOpenHelper{
private static final String TABLE_NAME = "sqlite-school.db";

private DaoHelp(Context context) {
super(context, TABLE_NAME, null, 7); //必须实现父类的方法,其中第二个参数是创建的数据库名,第4个参数是版本号,用于升级等操作
}

@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { try{
TableUtils.createTable(connectionSource, PersonanlBean.class); //根据PersonalBean来进行创建操作
Log.i("--ormlite:", "--onCreate:");
}catch (SQLException e){
e.printStackTrace();
}
}

@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try{
TableUtils.dropTable(connectionSource, PersonanlBean.class, true); //如果版本有更新则会执行onUpgrade方法,
TableUtils.createTable(connectionSource, PersonanlBean.class); //更新数据库先删除数据库再创建一个新的
Log.i("--ormlite:", "--onUpgrade:");
}catch (SQLException e){
e.printStackTrace();
}
}
// 用单例来生成DaoHelp对象
private static DaoHelp daohelp;
public static synchronized DaoHelp getDaoHelp(Context context){
if(daohelp == null){
synchronized (DaoHelp.class){
if(daohelp == null) daohelp = new DaoHelp((context));
}
}
return daohelp;
}
//利用生成的daoHelp对象来生成Dao对象,该对象是处理数据库的关键要素
private Dao, Integer> dao;
public Dao,Integer> getDao() throws SQLException{
if(dao == null){
dao = getDao(PersonanlBean.class);
}
return dao;
}
//释放资源
@Override
public void close(){
super.close();
Log.i("--ormlite:", "--close:");
dao = null;
}
}
       第四步 就是我们的数据库处理了,由于是学习,我没有做太多的UI处理,这里可能需要读者自己做下简单的UI调整,我就不做太多xml文件的描述了

直接上方法吧 

      * 获取DaoHelp对象

       DaoHelp help = DaoHelp.getDaoHelp(this);

      1:添加数据

    //添加数据
for(int i = 0; i <5; i++) {
String str1 = "name" + i;
String str2 = "desc" + i;
PersonanlBean persOnal= new PersonanlBean(str1, str2);
help.getDao().createIfNotExists(personal); //这里create的相关方法有很多就不一一描述了
}
      2:删除数据

    // 创建Builder类进行复杂的where删除
DeleteBuilder, Integer> deleteBuilder = help.getDao().deleteBuilder();
deleteBuilder.where().le("id",4); //id小于等于4的条件删除
deleteBuilder.delete();

//多id删除
ArrayList ids = new ArrayList() {};
ids.add(7);
ids.add(8);
help.getDao().deleteIds(ids); //id在ids集合中就删除

// 直接删除
help.getDao().delete(help.getDao().queryForId(9)); //指定对象删除
//指定id删除
help.getDao().deleteById(10); //指定id为的删除
       3:修改数据

    UpdateBuilder updateBuilder = help.getDao().updateBuilder();     //获取Builder对象
updateBuilder.where().eq("id", 15); //当id为15时准备修改
updateBuilder.updateColumnValue("personal_name", "sasasasasas"); //把id为15的数据进行修改
updateBuilder.update(); //执行修改操作
        4:查找数据

    // id查找,查找id为11的数据
PersonanlBean pForId = help.getDao().queryForId(11);
if(pForId != null) {
Log.i("--ormlite", "--pForIdId:" + pForId.getId() + "--pForIdName:" + pForId.getName());
}
// 字段查找,查找personal_name列名中有“name1”的所有数据,返回时集合
List pForEq = help.getDao().queryForEq("personal_name", "name1");
for (PersonanlBean str : pForEq) {
Log.i("--ormlite", "--pForEqId:" + str.getId() + "--pForEqName:" + str.getName());
}
// where查找,id小于5
List pWheres = help.getDao().queryBuilder().where().le("id", 10).query();
for (PersonanlBean str : pWheres) {
Log.i("--ormlite", "--pWheres:" + str.getId() + "--pWheres:" + str.getName());
}
    // 整体查找,遍历
QueryBuilder, Integer> queryBuilder = help.getDao().queryBuilder();
List persOnals= queryBuilder.query();
for (PersonanlBean str : personals) {
Log.i("--ormlite", "--personals" + str.getId() + ":" + str.getName());
}


总结:由于自己水平有限,写的技术含金量很低,分享的水平有限,希望各位不吝赐教,有疑问或什么的欢迎私聊,总之希望您对我的博客进行一下指点与批评。源码已上传


















推荐阅读
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 本文详细介绍了如何在 Android 应用中获取系统的版本号,包括具体的应用场景和实现步骤。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 本文深入探讨了如何利用Maven高效管理项目中的外部依赖库。通过介绍Maven的官方依赖搜索地址(),详细讲解了依赖库的添加、版本管理和冲突解决等关键操作。此外,还提供了实用的配置示例和最佳实践,帮助开发者优化项目构建流程,提高开发效率。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
Arthur小熊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有