首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从源码看Androidsqlite是怎么通过cursorwindow读DB

执行query 执行SQLiteDatabase类query系列函数时,只会构造查询信息,不会执行查询。...moveToPosition源码路径 fillWindow----真正耗时地方 然后会执行sql语句,向共享内存填入数据, fillWindow源码路径 在SQLiteCursor.java可以看到...cursorWindow范围内,不会执行fillWindow, 而超出cursorwindow范围,会调用fillWindow, 而在nativeExecuteForCursorWindow, 获取记录时...(通常认为不可以并发读写,sqlite并发实际上是串行执行,但可以并发读,这里要强调是多线程读也可能有问题),具体见稍后一篇文章“listview并发读写数据库”。  ...这里还可以延伸一下,因为高版本android sqlite对旧版有许多改进,   所以实际开发里我们有时候会把sqlite源码带在自己工程里,使得低版本android也可以使用高版本特性,并且避开一部分兼容性问题

1.4K70
您找到你想要的搜索结果了吗?
是的
没有找到

【Jetpack】Room 预填充数据 ( 安装 DB Browser for SQLite 工具 | 创建数据库文件 | 应用设预填充数据对应数据库文件 | 预填充数据库表字段属性必须一致 )

, 就会从 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

45320

学习|Android JetPack组件---ORM框架Room使用

导语 Room 持久性库在 SQLite 基础上提供了一个抽象层,让用户能够在充分利用 SQLite 强大功能同时,获享更强健数据库访问机制。 ? Room简介 ?...然后,应用使用每个 DAO 从数据库获取实体,然后再将对这些实体所有更改保存回数据库。最后,应用使用实体来获取和设置与数据库表列相对应值。 Room 不同组件之间关系图 ?...首先把Room组件在build.gradle引入进来 def room_version = "2.2.5" implementation "androidx.room:room-runtime...,上面@EntitytableName就是我们在Sqlite数据库要生成表名,@PrimaryKey就是设置code为主键,@ColumnInfo是用于标识表里列名,如果这个不写的话就默认是你属性名...打开Sqlite数据库后可以看到了这个表名里数据 ? 这样,简单Room就已经实现了。

1.1K20

Android—Room 通用封装

前言 平常咱们使用数据库时候,基本操作都差不太多,增,删,改,查,但如果操作不同数据时,就需要写较多重复代码,仅仅是因为操作类对象变化了。...OnConflictStrategy.REPLACE) abstract fun insert(personList: List): List /** * 根据对象主键删除...(主键是自动增长,无需手动赋值) */ @Delete abstract fun delete(obj: T) /** * 根据对象主键更新(主键是自动增长...} 因为RoomQuery注解需要一个常量,这里就无法通过泛型去解决,所以就使用了SupportSQLiteQuery类和@RawQuery注解,这样咱们就可以通过sql语句来封装一些通用操作,就解决了...= "DBFactory.db" @Volatile private var dbFactory:DBFactory?

2.1K40

【Jetpack】使用 Room Migration 升级数据库异常处理 ( 多个数据库版本迁移 | fallbackToDestructiveMigration() 函数处理升级异常 )

数据库架构时 , 将需要执行数据库迁移以保留旧数据并防止应用程序崩溃 ; 自动运行 : 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

31120

上手使用 Room Kotlin API

Room 是 SQLite 封装,它使 Android 对数据库操作变得非常简单,也是迄今为止我最喜欢 Jetpack 库。...在本文中我会告诉大家如何使用并且测试 Room Kotlin API,同时在介绍过程,我也会为大家分享其工作原理。 我们将基于 Room with a view codelab 为大家讲解。...Word 类代表表一条记录,并且它需要使用注解 @Entity。我们使用 @PrimaryKey 注解为表定义主键。然后,Room 会生成一个 SQLite 表,表名和类名相同。...每个类成员对应表列。列名和类型与类每个字段名称和类型一致。如果您希望改变列名而不使用类变量名称作为列名,可以通过 @ColumnInfo 注解来修改。...::class) fun closeDb() { db.close() } ... } 要测试单词是否能够被正确添加到数据库,我们会创建一个 Word 实例,然后插入数据库,然后按照字母顺序找到单词列表第一个

1.5K10

Android SQLite数据库

put()方法重载,用于向ContentCalues添加数据,只需要将表每个列名以及相应代添加数据传入即可。...是一个占位符,可以通过第四和参数提供一个字符串数组为第三个参数每个占位符指定相应内容,arrayOf()方法是Kotlin中提供一种用于便捷创建数组内置方法。...()方法后返回一个Cursor对象,查询到所有数据都将从这个对象取出。...getColumnIndex()方法获取某一列在表对应位置索引,然后将这个索引传入相应取值方法,就可以读取数据了。 最后记得关闭。...当指定数据库版本号大于当前数据库版本号时候,就会进入onUpgrade()方法执行更新操作,这里需要为每一个版本号赋予其所对应数据库变动,然后再onUpgrade()方法对当前数据库版本号就行判断

2.1K20

【Jetpack】ORM 数据库访问框架 Room 简介 ( 对象关系映射 ORM 概念简介 | Room 框架组成部分 - 实体、数据库访问对象、数据库持有者 | Room 框架使用步骤 )

一、对象关系映射 - 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 依赖库

1.6K20

【Jetpack】Room 销毁重建策略 ( 创建临时数据库表 | 拷贝数据库表数据 | 删除旧表 | 临时数据库表重命名 )

一、销毁 和 重建策略 在 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 类实例对象 */

32040

Android 课设之个人音乐播放器

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媒体音乐播放器都更加熟练使用这些类一些常用方法和常用属性。

1.3K40

JetPack--Room数据库

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

1.5K20

我又开发了一个非常好用开源库,调试Android数据库有救了

本文同步发表于我微信公众号,扫一扫文章底部二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。 2020年只剩下最后半个月了,你今年定下目标都完成了吗?...其实做了Android开发这么多年,一直以来都有一个我认为非常不人性化地方,就是开发人员没有办法简单直接地查看当前应用程序数据库文件,这个问题导致Android数据库开发与调试工作一直都比较困难...这种工具是在电脑上用来查看数据库文件,因此需要先想办法将手机数据库文件导出到电脑上(这一步也并不容易,因为内置存储空间文件很难导出),然后再用SQLite Expert打开该文件即可查看其中数据...比如上图中demo1.db就是我当前项目工程一个数据库文件,internal storage表示它是存放在内置存储空间下。...点击demo1.db,即可打开这个数据库文件,并将该数据库所有表罗列出来,如下图所示。 ?

58641

_Android 课设之个人音乐播放器

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媒体音乐播放器都更加熟练使用这些类一些常用方法和常用属性。

21810

实现Android本地Sqlite数据库网络传输到PC端

文章开头也说过,开发初期做业务测试时候,往往查询功能还没做完,需要看数据库业务逻辑做是否对,数据是否正常,所以需要在数据库查询。...实现方式 微卡智享 流程设计 上图做了一个简单流程设计图,还是很简单,中间数据库文件传输采用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端程序就实现了。

1.1K20
领券