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

高效解决「SQLite」数据库并发访问安全问题,只这一篇就够了

concurrent-database/ 对于 Android Dev 而言,有关 SQLite 的操作再经常不过了,相比你一定经历过控制台一片爆红的情况,这不禁让我们疑问:SQLite 到底是线程安全的吗?...保证 SQLIiteHelper 在无人使用时才断开连接 关于这个问题的解决 stackoveflow 上很多人建议我们:永远不要断开 SQLiteHelper 的连接,但是这样以来你会在 logcat...所以,我非常不建议你用这个方法。...同样的情况也发生在 closeDatabase() 方法中,当你每次调用该方法时,我们的 mOpenCounter 对象就会减一。当它减到 0 时,我们就去关闭这个数据库的连接。...Android 程序 OOM Android 让你的 Room 搭上 RxJava 的顺风车 从重复的代码中解脱出来 ViewModel 和 ViewModelProvider.Factory:ViewModel

2.8K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Carson带你学Android:SQLlite数据库操作全解析(SQLiteOpenHelper类)

    数据库第1次创建时 则会调用,即 第1次调用 getWritableDatabase() / getReadableDatabase()时调用 // 在继承SQLiteOpenHelper类的子类中复写...数据库升级时自动调用 // 在继承SQLiteOpenHelper类的子类中复写 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion...具体使用 使用步骤 = 自定义数据库子类(继承SQLiteOpenHelper类)、创建数据库 & 操作数据库(增、删、查、改) 下面,我将逐一介绍每个步骤 3.1 自定义数据库子类(继承 SQLiteOpenHelper...() * 注:完成数据库操作后,记得调用close()关闭数据库,从而释放数据库的连接 */ sqliteDatabase.close(); /**...@Override public void onCreate(SQLiteDatabase db) { System.out.println("创建数据库和表");

    98420

    Android数据库安全解决方案,使用SQLCipher进行加解密

    int arg2) { } } 除了引入的包不一样了,其它的用法和传统的SQLiteOpenHelper都是完全相同的。...(); } }); } } 可以看到,在onCreate()方法中首先调用了SQLiteDatabase的loadLibs()静态方法将SQLCipher所依赖的so库加载进来,注意这里使用的是...然后我们创建了MyDatabaseHelper的实例,并调用getWritableDatabase()方法去获取SQLiteDatabase对象。...在添加数据按钮的点击事件里面,我们通过ContentValues构建了一条数据,然后调用SQLiteDatabase的insert()方法将这条数据插入到Book表中。...现在运行一下程序,先点击添加数据按钮,再点击查询数据按钮,刚刚添加的那条数据就应该在控制台里打印出来了。

    2.2K90

    【Android从零单排系列四十二】《Android数据存储方式-SQLite数据库》

    二 SQLite数据库使用方法 创建数据库和表: 创建一个继承自SQLiteOpenHelper的子类,并实现它的构造方法、onCreate()和onUpgrade()等方法。...在onCreate()方法中,使用SQL语句创建数据库和表,例如:CREATE TABLE语句。 在构造方法中指定数据库名称、版本号和表结构等信息,并调用父类的构造方法。...关闭数据库: 在不再需要使用数据库时,通过调用close()方法来关闭数据库连接,例如:db.close()。 这些是SQLite数据库的基本使用方法。...onCreate(SQLiteDatabase db):当数据库第一次创建时调用,可以在其中执行创建表的操作。...然后,通过查询获取所有数据,并在控制台打印出每条数据的ID和名称。最后,通过调用dbHelper.close()关闭数据库连接。

    25630

    Android SQLite 数据库学习

    Android系统推荐使用 SQLiteOpenHelper 的子类创建数据库,因此需要创建一个继承自SQLiteOpenHelper,并重写该类中的onCreate()方法和onUpgrade()方法即可...为什么要使用SQLiteOpenHelper的子类呢,因为SQLiteOpenHelper为抽象类(abstract),必须使用其子类进行继承,同时还需要重写父类的抽象方法,onCreate()方法和onUpgrade...需要注意的是,使用完SQLiteDatabase对象后定要调用close()方法关闭,否则数据库连接会一直存在,不断消耗内存,当系统内存不足时将获取不到SQLiteDatabase对象,并且会报出数据库未关闭异常...,new String[]{name});     db.close();     return number; }   在上述代码中,通过SQLiteDatebase对象db调用update()方法用来修改数据库中的数据...,new String[]{id});     db.close();     return number;  }   从上述代码中可以看出,删除数据不同于增加和修改数据,因为删除数据不需要ContentValues

    1.2K00

    手机卫士黑名单功能(列表展示)

    ListView对象的setAdapter()方法,参数:ListAdapter对象 定义内部类CallSmsSafeAdapter继承系统的BaseAdapter 实现四个方法,重要的有两个getCount()和getView...数据库操作 在db包下新建一个BlackNumberDBOpenHelper类继承SQLiteOpenHelper类 实现构造方法 调用父类的构造方法,super(),参数:上下文,数据库名称,游标工厂...(null),版本号(1) 重写onCreate()方法,传递进来参数SQLiteDatabase对象 调用SQLiteDatabase对象的execSQL()方法,参数:String的sql语句(例如...集合 查询全部 定义方法findAll(),查询全部数据 调用helper对象的getReadableDatabase()方法,获取到SQLiteDatabase对象 调用SQLiteDatabase对象的...,String[]参数值数组 调用SQLiteDatabase对象的close()方法,关闭数据库 CallSmsSafeActivity.java package com.qingguow.mobilesafe

    65230

    Android之SQLite使用

    综合来看,即轻量 兼容 多端 无需配置 无外部依赖 拥有简单易懂的API 安全 SQLiteDatabase和SQLiteOpenHelper SQLiteDatabase是Android SDK中操作数据库的核心类之一...oldVersion,int newVersion); image.png SQLiteOpenHelper中onCreate和onUpdate方法 SQLiteOpenHelper会自动检测数据库文件是否存在...也就是说oncreate()方法在数据库文件第一次创建时调用。 先看看SQLiteOpenHelper类的构造方法再解释onUpdate()方法何时会被调用。...总结一下oncreate()和onUpdate()调用过程: 如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后会调用oncreate()方法,在该方法中一般需要创建表、视图等组件...如果数据库文件存在,并且当前版本号高于上次创建或升级的版本号,SQLiteOpenHelper会调用onUpdate()方法,调用该方法后会更新数据库的版本号。

    63020

    安卓第七夜 雅典学院

    我将在这里说明安卓中该数据库的使用方法。这里只专注于安卓中SQLite数据库的接口使用,并没有深入关系型数据库和SQL语言的背景知识。 《雅典学院》是拉斐尔的画。...创建对象模型 在面向对象语言中,对象用于描述和操作数据。我使用两个类Category和Contact的对象: Category:联系人分类。包括id属性和name属性。 Contact:联系人。...安卓提供了一个类来实现相关的交互,即SQLiteOpenHelper。 SQLiteOpenHelper SQLiteOpenHelper是对象数据模型和关系型数据库的一个接口。...我需要覆盖该类的onCreate()和onUpgrade()方法,用于说明创建和升级时,数据库将采取的行动,比如在创建时新建数据库的表。...此外,我还编写了进行数据库操作的CRUD方法。这些方法的核心实际上是一些操作数据库的SQL语句。如果上面的CRUD方法无法满足数据库操作的需求,你还可以根据需要增加方法。

    1.3K80

    android开发之使用SQLite数据库存储

    SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。 SQLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。...SQLiteOpenHelper 的子类,至少需要实现三个方法: 构造函数,调用父类 SQLiteOpenHelper 的构造函数。...调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容...当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。...创建表和索引 为了创建表和索引,需要调用 SQLiteDatabase 的 execSQL() 方法来执行 DDL 语句。如果没有异常,这个方法没有返回值。

    2.6K20

    Android学习--持久化(三) SQLite & LitePal

    ,SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),我们也必须在自己的类当中去重写这两个方法,分别在这两个方法中去实现创建和升级数据库的逻辑。       ...SQLiteOpenHelper当中有两个非常重要的实例化方法,getReadableDatabase()和getWritableDatabase(),这两个方法都可以创建或者而打开一个现有的数据库,入伙数据库已经存在就直接打开...cursor,一般传入都是null,第四个参数是当前数据库的版本号,这个额可以对数据库进行升级操作,构建出SQLiteOpenHelper实例之后再调用前面我们说的getReadableDatabase..., new String[]{"我在广州"}); //delete删除 //第一和表名,第二个参数是删除的条件,第三个参数是给约束条件赋值...,没和前面的更新道理相同 sqLiteDatabase.delete("Book","page > ?"

    80230

    移动应用常见Bug汇总及预防方法

    凡是点选或者下拉选择的界面,如果一旦选择完了无法回到不选择的情况,需要加上“清除选择”功能按钮 3.5 没有选择记录点击删除/修改按钮要提示“请先选择记录” 3.6 选择记录后点击删除按钮要提示“确实要删除吗?...(SQLiteDatabase.java:1950) > SQLiteOpenHelper( 2284): at > android.database.sqlite.SQLiteDatabase...而在关闭的同时,却没能及时的调用dismiss来解除对ProgressDialog等的引用,从而系统抛出了标题中的错误,而掩盖了真正导致这个错误的异常信息。...> window -> Preferences -> Android -> DDMS -> ADB connection time out(ms).把这个时间设置的长一些,默认是5秒即5000ms, 我改成...在开发的过程中经常在安装apk到模拟器上时会报出 ActivityManager: Error: Activity class {..} does not exist.

    1.2K21

    Android数据库高手秘籍(三)——使用LitePal升级表

    LitePal的项目地址是:https://github.com/LitePalFramework/LitePal 传统的升级表方式 上一篇文章中我们借助MySQLiteHelper已经创建好了news...现在只需要调用如下代码,表就可以得到创建或升级了: [java] view plaincopy SQLiteOpenHelper dbHelper = new MySQLiteHelper(this,...现在调用以下代码来创建或升级数据库: [java] view plaincopy SQLiteOpenHelper dbHelper = new MySQLiteHelper(this, "demo.db...现在我们已经学习了新增表和新增列这两种升级方式,那么如果是某张表中的某一列已经没有用了,我想把这一列删除掉该怎么写呢?...那么有的朋友可能会问了,不是说SQLite不支持删除列的命令吗?那LitePal又是怎样做到的呢?

    99090

    SQlite数据库简介Android网络与数据存储

    类来方便在Android中操作数据库” ---- 1.SQLiteOpenHelper类的使用##### public abstract class SQLiteOpenHelper{} 源代码中的SQLiteOpenHelper...version 表示创建的数据库的版本; */ super(context, name, factory, version); } //数据库第一次创建时被调用...Log.d("MainActivity", "book price is :" + price); } while (cursor.moveToNext()); } cursor.close...比如说,我现在要查询Book表中的name和price列中的值,而且我要求查到的书名为《Android programming: the big nerd ranch guide》,不需要排序 ,则代码就如下编写...当然银 行肯定已经充分考虑到了这种情况,它会保证扣钱和收款的操作要么一起成功,要么都不会 成功,而使用的技术就是事务了。

    96030
    领券