} }; 更新使用 SQLiteOpenHelper 的类 一开始,我们的 LocalDataSource 类使用 CustomOpenHelper 进行工作,现在我要把它更新为使用...中的方法。...如果你的查询是较复杂的,你就得通过 SupportSQLiteQueryBuilder 创建一个 SupportSQLiteQuery。...举个例子,我们有一个 users 表,只想获得表中按名字排序的第一个用户。下面就是实现方法在SQLiteDatabase 和 SupportSQLiteDatabase 中的区别。...SQLiteOpenHelper 实现类进行测试的话,那我强烈推荐你先测试下再进行这个迁移的工作,避免产生相关 bug。
执行query 执行SQLiteDatabase类中query系列函数时,只会构造查询信息,不会执行查询。...moveToPosition源码路径 fillWindow----真正耗时的地方 然后会执行sql语句,向共享内存中填入数据, fillWindow源码路径 在SQLiteCursor.java中可以看到...cursorWindow的范围内,不会执行fillWindow, 而超出cursorwindow的范围,会调用fillWindow, 而在nativeExecuteForCursorWindow中, 获取记录时...(通常认为不可以并发读写,sqlite的并发实际上是串行执行的,但可以并发读,这里要强调的是多线程读也可能有问题),具体见稍后一篇文章“listview并发读写数据库”。 ...这里还可以延伸一下,因为高版本的android sqlite对旧版有许多改进, 所以实际开发里我们有时候会把sqlite的源码带在自己的工程里,使得低版本的android也可以使用高版本的特性,并且避开一部分兼容性问题
首语 Android使用SQLite作为数据库存储数据,但是SQLite使用繁琐且容易出错,有许多开源的数据如GreenDAO、ORMLite等,这些都是为了方便SQLite的使用而出现的,Google...也意识到了这个问题,在Jetpack组件中推出了Room,Room在SQLite上提供了一层封装,可以流畅的访问数据库。...优势 拥有SQLite的所有操作功能。 使用简单,通过注解的方式实现相关功能,编译时自动生成实现类impl。 与LiveData、LifeCycle及Paging天然支持。...依赖 implementation "androidx.room:room-runtime:2.2.6" annotationProcessor "androidx.room:room-compiler...需要注意,数据操作应在工作线程操作,除非指定在主线程可以查询,否则会发生崩溃。
2.1 集成 greenDAO greenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库。...SQLite 对象映射库。...使用它来避免样板代码并轻松地将 SQLite 数据转换为 Java 对象。 Room 提供 SQLite 语句的编译时检查,可以返回 RxJava 和 LiveData Observable。...import androidx.room.Database; import androidx.room.RoomDatabase; /** * @FileName: com.safframework.rxcache4a.persistence.db.room.AppDatabase...使用这种方式,可以替换成任何的持久层框架。使得 DB 也可以成为 RxCache 的其中一级缓存。 三. 使用 编写单元测试,看一下集成 greenDAO 的效果。
, 就会从 assets 资源目录中获取 SQLite 数据库文件 , 将该文件中的数据读取出来 , 并存储到 Room 数据库中 ; 二、安装 DB Browser for SQLite 数据库查看工具..., 0 积分即可下载 ; 然后 , 安装 DB Browser for SQLite 数据库 ; 下载后的文件是 DB.Browser.for.SQLite-3.12.2-win64.msi 文件 ;...age 字段的 非空属性不同 , 这里 在 DB Browser for SQLite 工具中设置 age 字段为非空字段 ; 右键点击数据库表 , 在弹出的右键菜单中 , 选择 " 修改表 " 选项...| 临时数据库表重命名 ) 的基础上 , 添加了 由 DB Browser for SQLite 工具制作的 预填充数据 文件 ; 1、Entity 实体类代码 该实体类中 , 暂时只保留 id ,...import androidx.room.RoomDatabase import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase
导语 Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。 ? Room简介 ?...然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体的所有更改保存回数据库中。最后,应用使用实体来获取和设置与数据库中的表列相对应的值。 Room 不同组件之间的关系图 ?...首先把Room的组件在build.gradle中引入进来 def room_version = "2.2.5" implementation "androidx.room:room-runtime...,上面@Entity中tableName就是我们在Sqlite数据库中要生成的表名,@PrimaryKey就是设置的code为主键,@ColumnInfo是用于标识表里的列名,如果这个不写的话就默认是你的属性名...打开Sqlite数据库后可以看到了这个表名里的数据 ? 这样,简单的Room就已经实现了。
前言 平常咱们使用数据库的时候,基本操作都差不太多,增,删,改,查,但如果操作不同的数据时,就需要写较多的重复的代码,仅仅是因为操作的类对象变化了。...OnConflictStrategy.REPLACE) abstract fun insert(personList: List): List /** * 根据对象中的主键删除...(主键是自动增长的,无需手动赋值) */ @Delete abstract fun delete(obj: T) /** * 根据对象中的主键更新(主键是自动增长的...} 因为Room的Query注解需要一个常量,这里就无法通过泛型去解决,所以就使用了SupportSQLiteQuery类和@RawQuery注解,这样咱们就可以通过sql语句来封装一些通用的操作,就解决了...= "DBFactory.db" @Volatile private var dbFactory:DBFactory?
数据库中的架构时 , 将需要执行数据库迁移以保留旧数据并防止应用程序崩溃 ; 自动运行 : Room Migration 数据库迁移工具 会 自动 创建迁移文件 并将其应用于数据库 , 以使 SQLite...) lateinit var name: String /** * 年龄字段 * 数据库表中的列名为 age * 数据库表中的类型为 INTEGER 文本类型...at androidx.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:117) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper...:331) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase...(FrameworkSQLiteOpenHelper.java:92) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase
Room 是 SQLite 的封装,它使 Android 对数据库的操作变得非常简单,也是迄今为止我最喜欢的 Jetpack 库。...在本文中我会告诉大家如何使用并且测试 Room Kotlin API,同时在介绍过程中,我也会为大家分享其工作原理。 我们将基于 Room with a view codelab 为大家讲解。...Word 类代表表中的一条记录,并且它需要使用注解 @Entity。我们使用 @PrimaryKey 注解为表定义主键。然后,Room 会生成一个 SQLite 表,表名和类名相同。...每个类的成员对应表中的列。列名和类型与类中每个字段的名称和类型一致。如果您希望改变列名而不使用类中的变量名称作为列名,可以通过 @ColumnInfo 注解来修改。...::class) fun closeDb() { db.close() } ... } 要测试单词是否能够被正确添加到数据库,我们会创建一个 Word 实例,然后插入数据库,然后按照字母顺序找到单词列表中的第一个
put()方法重载,用于向ContentCalues中添加数据,只需要将表中的每个列名以及相应的代添加数据传入即可。...是一个占位符,可以通过第四和参数提供的一个字符串数组为第三个参数中的每个占位符指定相应的内容,arrayOf()方法是Kotlin中提供的一种用于便捷创建数组的内置方法。...()方法后返回一个Cursor对象,查询到的所有数据都将从这个对象中取出。...getColumnIndex()方法获取某一列在表中对应的位置索引,然后将这个索引传入相应的取值方法中,就可以读取数据了。 最后记得关闭。...当指定的数据库版本号大于当前数据库版本号的时候,就会进入onUpgrade()方法中执行更新操作,这里需要为每一个版本号赋予其所对应的数据库变动,然后再onUpgrade()方法中对当前数据库的版本号就行判断
一、对象关系映射 - ORM / Object Relational Mapping ---- Android 系统中使用的数据库是 SQLite 关系型数据库 , 使用 Android 提供的 api...: Entity Framework ; Python 平台 : DiangoORM ; 在 Android 中 , Google 官方提供了一个基于 SQLite 关系型数据库操作封装的 ORM 框架..."androidx.room:room-ktx:$room_version" } androidx.room:room-runtime 依赖库 是 运行时核心依赖库 , 在应用运行时提供 Room 框架的数据库相关核心功能...androidx.room:room-compiler 依赖库 是 Room 持久化库中的一个 编译时依赖项 , 用于 在编译时生成 Room 的如下实现代码 : AppDatabase 的子类 , 用于创建和访问数据库...; Dao 数据库访问对象实现类 , 用于执行 SQL 查询和操作 ; 实体类 Entity 的映射器 , 用于将数据库中的数据映射到实体类中 ; androidx.room:room-ktx 依赖库
一、销毁 和 重建策略 在 Android 中使用 Room 操作 SQLite 数据库 , 如果 SQLite 数据库表 修改比较繁琐 , 如 : 涉及到 修改 数据库表字段的数据类型 , 需要逐个修改数据库值...import androidx.sqlite.db.SupportSQLiteDatabase @Database(entities = [Student::class], version = 3,...Entity 实体 / 同时定义数据库表 和 对鹰的实体类 * 设置该数据类对应数据库中的一张数据表, 表名为 student * 该数据库表中的数据对应一个 Student 类实例对象 */...import androidx.sqlite.db.SupportSQLiteDatabase @Database(entities = [Student::class], version = 4,...Entity 实体 / 同时定义数据库表 和 对鹰的实体类 * 设置该数据类对应数据库中的一张数据表, 表名为 student * 该数据库表中的数据对应一个 Student 类实例对象 */
1.2开发技术 该App利用了SQlite数据库对于用户的管理,还有MediaPlayer媒体播放器的使用,和各种布局加以一些控件得以使界面看着舒服,还有利用了广播信息对于用户的操作进行提示。...2.2 可行性分析 首先要对用户进行注册和登录修改删除等功能:可以使用sqlite数据库 要扫描文件夹的mp3文件:使用Java文件流的读写操作和Android的存取权限控制 要实现音乐的播放:使用MediaPlayer...(): 对于MusicPlayer进行初始化和准备工作。...; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import com.example.DB.DBAdapter...,还有组件间的通信,和广播信息,还整合了SQLite数据库,MediaPalyer媒体音乐播放器都更加熟练使用这些类的一些常用方法和常用属性。
JetPack提供了Room数据库,和GreenDAO等开源库一样,在SQLite做了封装 Room主要使用三个注解: 1.Entity:实体类,对应一张表 2.Dao:包含操作表的一些列方法 3.Database...需要满足:定义的类是一个继承RoomDatabase的抽象类,注解中定义包含实体类列表,包含一个没有参数的抽象方法并返回Dao对象 一、Room上手 首先添加依赖: implementation...androidx.room.migration.Migration; import androidx.sqlite.db.SupportSQLiteDatabase; /** * Created...中修改表结构比较麻烦,如果想要将sex字段从INTEGER改为TEXT,最好的方式是采用销毁与重建策略,将数据复制到一个临时表,在删除原表,再将临时表重命名成原表名,可以参考schema文件 static..._4) .fallbackToDestructiveMigration() .createFromAsset("mem.db
目录 开发环境 功能清单 部分源码 login.java MainActivity.java MyDatabase.java build.gradle 学习安卓开发时做的一个小demo,知识点包括:intent...具体可看视频: 简单的安卓网络音乐视频播放器app 截图: 开发环境 开发工具:Android Studio 音视频接口:网易云API,项目地址:网易云音乐 API service 功能清单 账号...; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.database.sqlite.SQLiteDatabase...; import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.Nullable; public class...:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso
以上吐槽来自 AndroidX 添加的新成员 DataStore 的类注释,地址如下: https://cs.android.com/androidx/platform/frameworks/support...If you want partial updates, consider the Room API (SQLite). DataStore provides ACID guarantees....具体用法详见官方写的单元测试 SingleProcessDataStoreTest,地址如下: https://cs.android.com/androidx/platform/frameworks/support...最后 到目前为止,DataStore 仍在开发中,并没有发布过任何可用的版本 ,现在并不足以替代 SharedPreferences 。...按 Google 的尿性,哪天流产了其实也不足为奇。你可以在 androidx-master-dev 中持续关注。 不过两个问题是可以确定的。
本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。 2020年只剩下最后半个月了,你今年定下的目标都完成了吗?...其实做了Android开发这么多年,一直以来都有一个我认为非常不人性化的地方,就是开发人员没有办法简单直接地查看当前应用程序中的数据库文件,这个问题导致Android数据库的开发与调试工作一直都比较困难...这种工具是在电脑上用来查看数据库文件的,因此需要先想办法将手机中的数据库文件导出到电脑上(这一步也并不容易,因为内置存储空间的文件很难导出),然后再用SQLite Expert打开该文件即可查看其中的数据...比如上图中的demo1.db就是我当前项目工程中的一个数据库文件,internal storage表示它是存放在内置存储空间下的。...点击demo1.db,即可打开这个数据库文件,并将该数据库中的所有表罗列出来,如下图所示。 ?
1.2开发技术该App利用了SQlite数据库对于用户的管理,还有MediaPlayer媒体播放器的使用,和各种布局加以一些控件得以使界面看着舒服,还有利用了广播信息对于用户的操作进行提示。...2.2 可行性分析首先要对用户进行注册和登录修改删除等功能:可以使用sqlite数据库要扫描文件夹的mp3文件:使用Java文件流的读写操作和Android的存取权限控制要实现音乐的播放:使用MediaPlayer...(): 对于MusicPlayer进行初始化和准备工作。...;import androidx.core.app.ActivityCompat;import androidx.core.content.ContextCompat;import com.example.DB.DBAdapter...,还有组件间的通信,和广播信息,还整合了SQLite数据库,MediaPalyer媒体音乐播放器都更加熟练使用这些类的一些常用方法和常用属性。
文章开头也说过,开发初期做业务测试的时候,往往查询功能还没做完,需要看数据库中业务逻辑做的是否对,数据是否正常,所以需要在数据库中查询。...实现方式 微卡智享 流程设计 上图做了一个简单的流程设计图,还是很简单的,中间的数据库文件传输采用NanoMsg通讯,C#端用用的Nuget包中的NNanoMsg,Android端采用的我自己封装的..."androidx.room:room-ktx:$room_version" C#:NNanoMsg 要在Nuget包中添加NNanoMsg Android端Demo 上图中是Android端...androidx.sqlite.db.SupportSQLiteDatabase /** * 作者:Vaccae * 邮箱:3657447@qq.com * 创建时间:2020-04-14...将本地Sqlite数据库传输到PC端的程序就实现了。
Room 简介 Room 持久化库提供了一个基于 SQLite 的抽象层,以便在利用 SQLite 的全部功能的同时实现更强大的数据库访问 Room 库帮你的 App 在设备上创建一个缓存,并作为此 App...然后,应用程序使用每个 DAO 从数据库中获取实体,并将对这些实体的任何更改保存回数据库。最后,应用程序使用实体来获取和设置与数据库中的表列对应的值 Room 组件关系图 ?...在最常见的示例中,Repository 实现了用于决定是从网络获取数据还是使用在本地数据库中缓存的结果的逻辑,既避免了 ViewModel 和数据的直接交互又统一了单一真实数据源的逻辑 Repository...在 MVVM 架构中的位置 ?...= '2.0.0' coroutines = '1.2.1' } Project 的 gradle.properties 中追加如下内容,转换为 AndroidX 项目 android.enableJetifier
领取专属 10元无门槛券
手把手带您无忧上云