前言 SQLite是移动端常用的数据库,我们就来简单介绍一下SQLite在Android上的体系结构。..._android.cpp │ └── sqlite3_android.h ├── Android.bp ├── CleanSpec.mk ├── dist │ ├── Android.bp │..._android.cpp │ └── sqlite3_android.h 1.2 libsqlite ├── dist │ ├── Android.bp │ ├── Android.patch...简单来说就是Android在orig目录下的sqlite3代码基础上加了一些定制化的功能,可以查看Android.patch,查看修改点。...SQLite on Android The Android port of SQLite contains a few customizations.
; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory...; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper...; import android.app.ActionBar; import android.app.Fragment; import android.content.ContentValues; import...android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import...android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener
SQLiteOpenHelper帮助类(是一个抽象类) 借助这个类就可以非常简单地对数据库进行创建和升级; 创建数据库 SQLiteOpenHelper是抽象类,需创建自己的类继承; 其中有两个抽象方法, onCreate()和onUpgrade...还有两个重要的实例方法: getReadableDatabase()和getWritableDatabase()。...()不会再执行了, 因为数据库只能创建一次,刚刚已经创建过了; 所以这里只能在onUpgrade()中, 执行Drop将原来的表删掉, 再重新调用onCreate()方法, 这样一开始的表和新加的表都会被创建...()返回的SQLiteDatabase对象; 在Android中即使不去编写SQL语句, 提供了一系列辅助性方法, 也能轻松完成所有CRUD操作。...} cursor.close(); } }); Cursor实例每次指向返回数据表的一行, 通过moveToFirst()和moveToNext
就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件....SQLite 不需要配置,这意味着不需要安装或管理。 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。...SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。 SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。...SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。...综合来看,即轻量 兼容 多端 无需配置 无外部依赖 拥有简单易懂的API 安全 SQLiteDatabase和SQLiteOpenHelper SQLiteDatabase是Android SDK中操作数据库的核心类之一
进行Android应用开发时经常会用到数据库。...Android系统支持sqlite数据库,在app开发过程中很容易通过SQLiteOpenHelper使用数据库,SQLiteOpenHelper依赖于Context对象,但是基于uiatomator1.0...和Java程序等无法获取Context的应用如何使用数据库呢?...Android App内如何创建数据库 ②. Android App内创建数据库如何自定义文件路径 ③. Android App内获取数据库流程解析 ④....无Context模式使用数据库,可在uiautomator1.0测试框架和其他app_process启动的进程内使用数据库。
数据库是应用开发中常用的技术,在Android应用中也不例外。Android默认使用了SQLite数据库,在应用程序开发中,我们使用最多的无外乎增删改查。...然而正如西方谚语 “There are two sides of a coin”,索引亦有缺点: 对于增加,更新和删除来说,使用了索引会变慢,比如你想要删除字典中的一个字,那么你同时也需要删除这个字在拼音索引和部首索引中的信息...建立索引会增加数据库的大小,比如字典中的拼音索引和部首索引实际上是会增加字典的页数,让字典变厚的。 为数据量比较小的表建立索引,往往会事倍功半。...编译SQL语句 SQLite想要执行操作,需要将程序中的sql语句编译成对应的SQLiteStatement,比如select * from record这一句,被执行100次就需要编译100次。...关于如何发现未关闭的Cursor,我们可以使用StrictMode,详细请戳这里Android性能调优利器StrictMode 耗时异步化 数据库的操作,属于本地IO,通常比较耗时,如果处理不好,很容易导致
(Binder.java:565) 如上异常堆栈中的错误信息error code 5: database is locked,经过查找发现code为5代表sqlite中的SQLITE_BUSY异常,详见...:https://www.sqlite.org/rescode.html#busy,这里面说,SQLITE_BUSY(5)异常是一个数据库文件在被其他不同的数据库连接进行并发操作的时候写操作将补发继续,...通常是多个进程的不同数据库连接对同一个数据库进行并发操作,例如进程A在进行耗时的数据库事务,而于此同时进程B也要进行一个数据库事务,这时候进程B就会直接返回SQLITE_BUSY的错误码,因为sqlite...,这里还有一个相似的数据库操作异常,code为6,对应的是SQLITE_LOCKED,详见:https://www.sqlite.org/rescode.html#busy,具体意思就是说,SQLITE_LOCKED...详见:https://github.com/sqlcipher/android-database-sqlcipher/issues/341#issuecomment-310289295,现在是改成动态来分配大小的
import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper import...import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper import...import android.database.sqlite.SQLiteOpenHelper import android.widget.Toast class MyDatabaseHelper(...import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper import...import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper import
1.本文采用单元测试的方式来测试Sqlite数据的增删改查操作。...import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper...; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log...; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase...; import android.database.sqlite.SQLiteDatabase; import android.test.AndroidTestCase; import android.util.Log
在android系统中使用的是sqlite数据库,前面的简易登录系统已经讲述了数据库的应用。本例的重点是实现数据库与listview的绑定。...demo的数据是将个人的信息绑定到listview中,并存在sqlite。...> 40 xml文档中定义了几个textview分别用来显示name和age。...8.addperson和deleteperson 添加和删除个人信息都与sqlite数据库相关。...18 Toast.makeText(this, "删除失败", Toast.LENGTH_LONG).show(); 19 } 20 } 个人信息删除调用sqlite
就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。...为什么要使用SQLite 不需要一个单独的服务器进程或操作的系统(无服务器的)。 SQLite 不需要配置,这意味着不需要安装或管理。...SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。...综合来看,即轻量 兼容 多端 无需配置 无外部依赖 拥有简单易懂的API 安全 在Android中如何使用 Android 提供的 SQLiteOpenHelper.java 是一个抽象类。...Eclipse和Android Studio均有自动填充功能 public DatabaseHelper(Context context, String name, CursorFactory factory
在我们为 Room 添加协程的支持期间,我们遇到并解决了在协程模型和 Android SQL API 中没想到的一些问题。在本篇文章中,我们会向您阐述我们遇到的这些问题,以及我们的解决方案。...的 SQLite 事务受制于单个线程 上述代码中的问题在于 Android 的 SQLite 事务是受制于单个线程的。...在协程中使用数据库事务操作可能会引起死锁 简单实现 为了解决 Android SQLite 的这个限制,我们需要一个类似于 runInTransaction 这样可以接受挂起代码块的 API,这个 API...中 SQLite 的线程限制是合理的,这在 Kotlin 还没出现时已然如此设计了。...直接取消 Android 线程对 SQLite 事务的限制是不可行的,因为我们希望提供一个向后兼容的解决方案,而上述这些方法的组合最终让我们在使用协程和 Fluent API 的解决方案中发挥了创造性。
SQLite是一个嵌入式的数据库引擎,专门适用于资源有限的设备(如手机)上适量数据存取。它的特点是:轻量级、独立性、隔离性、跨平台、多语言接口、安全性。...一.创建数据库和表 ---- Android提供了一个管理数据库的工具类SQLiteOpenHelper,用于管理数据库的创建和版本更新,创建SQLiteOpenHelper的子类,并实现它的onCreate...()和onUpgrade()方法。...二.增、删、改、查 ---- SQLite数据库的增删改查有两种方法: 如上面创建数据表那样在db.execSQL()方法中传入SQL语句,对数据库进行增删改查。...利用Android封装好的insert、update、delete或query语句来操作数据库。
cursor = null; try { String sql = "select count(*) as c from sqlite_master...false ; Cursor cursor = null ; try{ cursor = db.rawQuery( "select * from sqlite_master
sqlite是支持write ahead logging(WAL)模式的,开启WAL模式可以提高写入数据库的速度,读和写之间不会阻塞,但是写与写之间依然是阻塞的,但是如果使用默认的TRUNCATE模式,...当写入数据时会阻塞android中其他线程或者进程的读操作,并发降低。...那么在android中如何开启WAL模式呢? 看SQLiteDatabase开启WAL的核心方法源码。...return false; } // make sure this database has NO attached databases because sqlite's...在android中默认为TRUNCATE模式 , 请看如下源码: public static SQLiteDatabase openDatabase(String path, CursorFactory
constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 还有一些 ALTER TABLE 功能。...有五种常用数据类型: NULL:空值 INTEGER:整形 REAL:浮点型 VARCHAR:字符型 BLOB:大数据 注意:SQLite不支持BOOLEAN和DATE,因此可以用0,1代替BOOLEAN...(其它数据库也经常这么干) INTEGER或VARCHAR代替DATE 在Android系统中提供了android.database.sqlite包,用于进行SQLite数据库的增、删、改、查工作 android-sdk-windows...中sqlite3的配置,将eclipse\android-sdk-windows\tools中sqlite3.exe拷贝至eclipse\android-sdk-windows\platform-tools...将上面%Android%添加至Path后面,注意前面加分号 ? 然后打开cmd 输入sqlite3返回以下内容说明配置成功,接下来可以对数据库操作。 ?
SQLiteDatabase.openOrCreateDatabase(file,null); 遍历数据库中的所有表名 Cursor tables=database.rawQuery("select name from sqlite_master
它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需要占用几百kB的存储空间,这也是Android移动设备采用SQLite数据库的重要原因之一。 ...并且在保存数据时,支持null(零) 、integer (整数)、real (浮点数字) 、text (字符串文本)和blob(二进制对象)5种数据类型。...SQLite 数据库创建 在Android系统中,创建SQLite数据库是非常简单的。...Android系统推荐使用 SQLiteOpenHelper 的子类创建数据库,因此需要创建一个继承自SQLiteOpenHelper,并重写该类中的onCreate()方法和onUpgrade()方法即可...二、SQLite 基本操作方法 二 这种操作方法类似于执行SQL语句 (语法和SQL server类似)。 1.
SQLite SQLite 是遵循一套独特的称为语法的规则和准则。...大小写敏感性 有个重要的点值得注意,SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。...创建表 SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表。...columnN datatype, ); 删除表 SQLite 的 DROP TABLE 语句用来删除表定义及其所有相关数据、索引、触发器、约束和该表的权限规范。...的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。
,Android有LitePal, 这一篇文章好好总结一下 SQLite & LitePal,由于自己用的是Mac系统,在配置 adb的时候也遇到了一些问题,把这些问题也都说一下,避免大家跳太多的坑吧。...SQLite ---- 一:SQLite的创建 Android为了让我们更加方便的管理数据库,专门提供了一个SQLiteOpenHelper的抽象类,这意味的我们要是想使用它的话就得我们创建一个类去继承它...import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper...; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase...; import android.database.sqlite.SQLiteDatabaseLockedException; import android.support.v7.app.AppCompatActivity