android之SQLite数据库应用(二)

Android Studio SQLite数据库应用(二) Android Studio SQLite数据库应用(二)版本 Android Studio 1.5.1事务处理 升级数据库的最佳写法哈哈刚刚写完 SQLite数据库应用(一),接着把后面的写完吧;事务处理所谓事务处理就是,保证在完成一系列操作的时候,要么全部完成要么一个都完成不了。我还用之前的代码作为案例;现在我要把Book表中的数据都删掉,让后写入新的数据;如果在这个操作过程中出现了异常,那么 阅读详情

今天让我们总结下SQLite数据库在android系统中的应用。首先来看一些数据库的介绍:

      SQLite数据库是一种无类型的数据库,这就代表你可以保存任何类型的数据到任何表中的任何列哦,无论这个表在create的时候该列被声明成什么类型。因为SQLite在执行数据库建表语句的时候,会自动的将类型忽略的哦。

     它是一种用C语言编写的嵌入式数据库,它是一个轻量级的数据库,在一些基础简单的语句处理上要比oracle/mysql快很多,而且其对内存的要求很低。

     注意:这里一定要注意,SQLite数据库在一种情况下是要求类型匹配的,当我们建表是如create table table1(id integer primary key),sqlite对应一位integer primary key的列值允许你存储64位的整数。对于SQLite来说对字段不指定类型是完全有效的。Create Table ex1(a, b, c);  -------------------------------------------------------------------------------

  诚然SQLite允许忽略数据类型, 但是仍然建议在你的Create Table语句中指定数据类型. 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎. SQLite支持常见的数据类型, 如:

  CREATE TABLE ex2(

  a VARCHAR(10),

  b NVARCHAR(15),

  c TEXT,

  d INTEGER,

  e FLOAT,

  f BOOLEAN,

  g CLOB,

  h BLOB,

  i TIMESTAMP,

  j NUMERIC(10,5)

  k VARYING CHARACTER (24),

  l NATIONAL VARYING CHARACTER(16)

  );

 

上面我们对sqlite数据库的基本信息进行了介绍,现在我们一起看看sqlite的数据库语法。

至于像增删改查的语法了,实在是没什么可说的,和我们平时用的sql基本上一摸一样。我这里主要提示下怎么通过sqlite进行分页,要进行分页,需要通过如下语句

这里的limit 10代表要获取的数据的个数,offset 1表示从第几行数据开始获取。(第一行的offset为0)

 

---------------------------------------------------------------------

android与sqlite的结合:

 

       android为我们提供了一系列的api对sqlite数据库进行访问。这些类或者接口一般都存储在android.database和android.database.sqlite两个包中。

      如何创建和打开sqlite数据库

      在android中我们通过SQLiteDatabase这个类来操作数据库,获取其对象的方法一般有以下几种:

     1、在SQLiteDatabase中,我们可以看到这些方法

 

参数中的path代表着数据库的路径(如果是在默认路径/data/data/<package_name>/databases/下,则这里只需要提供数据库名称)、factory代表着在创建Cursor对象时,使用的工厂类,如果为null的话,则使用默认的工厂(这里我们可以实现自己的工厂进行某些数据处理哦)、flags代表的是创建表时的一些权限设置,多个权限之间用|分隔。

       open_readonly 代表的是以只读方式打开数据库

       open_readWrite代表以读写方式打开数据库

       create_if_necessary当数据库不存在时创建数据库

       no_localized_collators打开数据库时,不根据本地化语言对数据库进行排序

此外该类还有一个方法,为我们提供了一个内存表(即临时表,当跟数据库的连接被关闭的时候,会被删除)。当创建失败时,返回null

2、和创建、打开文件相似的是,这里context中也为我们提供了一些更加方便快捷的获取数据库对象SQLiteDatabase的方法。

此外,还提供了

 public abstract boolean deleteDatabase(String name);

该方法可以删除私有数据库当前目录下的名称为name的数据库。

 public String[] databaseList()则返回与当前activity相关联的所有的私有数据库的名称。

 

3、第三种办法就是通过实现自己的SQLiteOpenHelper。

 

SQLiteOpenHelper是系统提供的一个管理数据库表创建和更新的抽象类,我们必须通过继承SQLiteOpenHelper来实现自己的帮助类。

一般我们要重写三个方法,构造器、onCreate方法、onupgrade方法。

SQLiteOpenHelper创建数据库实际上是使用的context里面的方法创建、打开私有目录下的数据库文件。该类给我们提供了两个方法来获取SQLiteDatabase对象。

这里要特别注意,getReadableDatabase()和getWritableDatabase()方法并非和我们想象中的那样,一个返回只读,一个返回可读写的database。

 

        getWritableDatabase方法,返回一个可读写的database(如果数据库不存在则创建一个),一旦创建成功了,那么这个database数据库就会被缓存,下次再调用该方法时,会直接把缓存中的数据库对象返回给你。当由于磁盘以及写满或者权限问题导致无法获得可写的对象时,会抛出异常!如果过了一段时间,问题已经被修复了,当你再次调用该方法的时候,依旧可以获得一个可读写的database。

       getReadableDatabase方法,正常情况下,返回的结果和getWritableDatabase方法的一模一样。当遇见磁盘写满这种事故是,它不会跑出异常,而是返回一个只读的数据库对象。当我们再以后再调用改方法的时候,如果事故已经被解决掉,那么它会继续返回和getWritableDatabase一样的数据库对象。

      

 

------------------------------------------------------------------------------------

利用数据库对象SQLiteDatabase对数据库进行增删改查操作。

    这里要强调一点,无论我们怎么获得的数据库连接,我们可以看到,我们最后都是为了获得一个SQLiteDatabase对象,而我们的所以增删改查方法便都是通过这个对象来实现的。

 

增加数据:

 

 

 参数介绍:

table 要插入数据的表的名称

values:一个ContentValues对象,类似一个map.通过键值对的形式存储值。

conflictAlgon:冲突解决方案。例如当数据表主键的唯一性检测出错的时候,就会按照该值设定的值进行处理。

nullColumnHack:当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,我们要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。

 

(这里很多人会迷惑,nullColumnHack到底干什么用的,为什么会出现呢。当我们不设定一列的时候,不都是数据库给设为默认值吗?很多字段设置默认值也是null,这里显示的设置也是null,有什么区别吗,怎么会显示设置了之后就允许插入了呢?笔者为了找到原因,我去查看了源代码)

其实在底层,各种insert方法最后都回去调用insertWithOnConflict方法,这里我们粘贴出该方法的部分实现

 

 

这里我们可以看到,当我们的ContentValues类型的数据initialValues为null,或者size<=0时,就会再sql语句中添加nullColumnHack的设置。我们可以想象一下,如果我们不添加nullColumnHack的话,那么我们的sql语句最终的结果将会类似insert into tableName()values();这显然是不允许的。而如果我们添加上nullColumnHack呢,sql将会变成这样,insert into tableName (nullColumnHack)values(null);这样很显然就是可以的。

 

删除相关:

 

 

table:要删除的数据所在的表的名称

whereClause:条件语句,注意这里的条件语句并不包括where这个单词。例如 name="chenzheng_java" and age=23

whereArgs:我们再where子句中,为了防止sql注入,我们通常会通过?的方式进行代替,然后再为?赋值。

当删除正常执行时,返回的是删除的数据的个数;否则的话,返回0.如果我们想全部删除的话,whereClause设置为“1”即可。

 

查询相关:

 

     主要方法有

 

参数介绍:

table 表名称

columns 要查询的列名,以数组的形式提供。

selection:条件语句

selectionArgs:条件语句中?的内容参数、

limit:所取的记录个数限制

eidtTable :第一个可编辑的表名称

 

其中rawQuery是通过sql语句进行查询的哦。

 

 

修改操作:

 

 

 

----------------------------------------------------------------------------

事务相关:

 和事务相关的方法

 

transactionListener:当事务执行了begin/commit/rollback方法时触发

 

关于Exclusive和immediate模式的说明:

Exclusive代表排他的、独立的,当我们用这种模式获取事务时,在我们的事务没有结束之前,其他的线程和进程是既不能读取该数据库,也不能对数据库进行任何写操作;

immediate代表即时的,当我们用这种模式获取事务的时候,其他进程和线程无法写入该数据库,但是却可以正常的读取。

 

设置事务提交的方法

setTransactionSuccessful() ,记得一定要调用此方法,要不事务不会提交,而是会自动回滚的。

 

结束事务:endTransaction();一般在调用了setTransactionSuccessful()方法之后接着调用endTransaction()方法、

 

--------------------------------------------------------------------------------------

记得,在程序的最后,一定要调用SQLiteDatabase的close()方法关闭数据库。

 

---------------------------------------------------------------------------------------

结果集的遍历:

android.database.Cursor接口

 

 

 

 

如果你用过JDBC中的游标,那你对这里面的所有方法应该都不陌生。这里就不多详细介绍用法了。

Android Studio 使用插件Database Navigation 连接 sqlite数据库 Database Navigation 是一款在 Android Studio 开发环境中非常实用的插件,它主要致力于帮助开发者更便捷、高效地管理和操作数据库,尤其是在 Android 项目涉及到数据库相关开发工作时,能够提升开发体验与效率。 阅读详情

相关推荐

Android数据库:SQLite除了.db文件,还多出.db-shm,.db-wal文件

Android数据库:SQLite除了.db文件,还多出.db-shm,.db-wal文件 使用安卓数据库保存文件时,在Android Studio 的 Device File Explorer里数据库文件目录 /data/data/com.urovo.datatopc/databases/DATA.db 发现其目录下不仅有.db文件,还有两个其他文件 .db-shm和.db-wal文件 而且数据库存储文件DATA.db(这是我的数据库名字,你们的可能不一样)保存至本地,通过SQLite Develope

m0_53581523的博客 4941

android 7.0 sqlite,Android 一篇很啰嗦的SQLite知识总结

版权声明:本文为博主原创文章,未经博主允许不得转载Github:github.com/AnliaLee首发地址:Anlia_掘金大家要是看到有错误的地方或者有啥好的建议,欢迎留言评论前言博主这两天心血来潮准备回顾下SQLite的知识,然而网上查找资料的过程是痛苦的,因为很少有一篇博客能把SQLite的入门知识讲全的,得好几篇合着来看才行,因此我的浏览器选项卡基本上是这样的正所谓自己动手丰衣足食,我...

weixin_39883129的博客 397

安卓db数据库查看工具——快速管理与分析SQLite数据库

SQLite 是 Android 内置的轻量级关系型数据库管理系统,为 Android 应用提供了一种高效、便捷的数据持久化方案。与传统的关系型数据库不同,SQLite 将数据库存储在文件系统中的单一文件内,从而简化了数据库的部署和管理。SQLite 支持标准的 SQL 语言,允许在没有服务器进程的情况下进行数据库操作,这使得它非常适合于资源有限的移动设备环境。在 Android 应用开发中,SQLite 数据库常用于本地数据存储、用户个性化设置记录以及应用内缓存。

weixin_32869687的博客 1945

如何读写android 文件

读取文件    FileInputStream fis = openFileInput("first.txt"); //读取文件内容 first.txt 为要读取的文件路径,我这里是直接使用的android默认存储路径,所以直接写文件名。             ByteArrayOutputStream bstr = new ByteArrayOutputStream();

wcooper的博客 643

sqlite3用于真机查看数据的,适合安卓4.4版本

sqlite3用于真机查看数据的,适合安卓4.4版本,从安卓4.4虚拟机器中提取出来的。

【ChatGPT实战案例】ChatGPT如何帮助产品经理高效工作?

1. 产品经理主要工作方向, 2. 具体工作中,向ChatGPT提问参考

weixin_62909516的博客 1900

SharePreference原理

SharedPreferences是Android提供的数据持久化的一种手段,适合单进程、小批量的数据存储与访问。因为SharedPreferences的实现是基于单个xml文件实现的,并且,所有持久化数据都是一次性加载到内存,如果数据过大,是不合适采用SharedPreferences存放的。而适用的场景是单进程的原因同样如此,由于Android原生的文件访问并不支持多进程互斥,所以SharePreferences也不支持,如果多个进程更新同一个xml文件,就可能存在同不互斥问题。 SharedPref

Android 4298

Cursor设置界面汉化保姆级教程:手把手教你修改JS文件实现中文界面(附避坑指南)

本文提供Cursor编辑器设置界面汉化的详细教程,从定位JS文件到安全修改实现中文界面,包含必备工具清单、文件路径指引和常见问题解决方案。通过手把手教学帮助用户轻松完成汉化,提升使用体验,特别适合不熟悉英文界面的开发者。

weixin_29007809的博客 1414

存储之SharedPreferences

SharedPreferences是一种文件存储方式,适合小数据量,简单寄存,多用于存配置和用户登陆信息。 不适合多对象信息存储,多对象适合用json和数据库。 简单来说SharedPreferences操作简单,需要说的只有两点: 1、获取context 调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序...

438

3DGS实战避坑指南:从零搭建到成功训练

本文详细介绍了3D Gaussian Splatting(3DGS)从环境配置到成功训练的实战避坑指南。涵盖git clone的正确使用、依赖安装的隐藏陷阱、CUDA版本兼容性解决方案、首次训练验证、常见报错急救方案、性能优化技巧及可视化调试方法,帮助开发者高效搭建和训练3DGS模型。

weixin_29053383的博客 365

避坑指南:LAMMPS做GCMC模拟时,化学势mu和压力p到底怎么设?

本文详细解析了LAMMPS中巨正则蒙特卡洛(GCMC)模拟的关键参数设置,特别是化学势(mu)与压力(p)的正确计算方法。通过理论分析、实用公式和黄金法则,帮助用户避免常见误区,提升模拟精度和效率,适用于各类复杂体系的分子模拟研究。

weixin_42525289的博客 432

android与mysql的交互,与Android中的外部SQLite数据库进行交互.

我正在做一个类似项目的项目.我请求对数据库进行更新,并且根据所需的更新量,它要么向下发送一个全新的数据库,要么发送一系列SQL语句.我强烈建议将数据库保留在sdcard上(如果可用),尤其是如果您要下载的数据库大小可变且大小仅超过几千字节时.我正在执行以下操作以获取文件(修改口味,因为您可能需要在SOAP响应中处理XML,也请忽略进度内容.)fileStream = new FileOutputS...

weixin_32529407的博客 301

opencv 常用函数总结

本文是一份OpenCV图像处理的常用函数总结,详细介绍了图像的读入、显示、保存、像素处理、图像属性获取、基础操作、阈值处理、图像平滑、形态学转换以及直方图处理等关键技术。文章通过代码示例和参数说明,帮助读者快速掌握OpenCV在图像处理领域的应用。

weixin_44063529的博客 1600

Android查看数据库“*.db“内容

Android查看数据库“*.db"内容(包括本地文件、真机、虚拟机的方法) 使用android自带的SQLite,或者第三方的GreenDao等技术操作数据库时,查看内容有以下方案。 法一 查看非虚拟机内的本地数据库文件,可以下载查看数据库的插件。 File>Settings>Plugins>搜索”Database Navigator”>Install>重启Ansroid studio>左侧会出现“DB Browser“>点击绿色加号,设置你要看的"*.db”文

Yimi-依米 的博客 5595

STM32F103模拟SSI时序解析:实现高精度绝对式编码器位置读取

本文详细解析了如何在STM32F103微控制器上通过软件模拟SSI协议时序,实现高精度绝对式编码器的位置读取。文章从项目驱动出发,深入剖析了SSI通信原理、硬件电平转换连接、核心软件模拟代码实现及关键时序参数调试方法,并提供了使用示波器进行波形对齐与优化的实战指南,为成本敏感型工业控制与机器人项目提供了高性价比的解决方案。

weixin_29196315的博客 141

超声波传感器(CH101&ch201) - Ⅰ

压电微机械超声换能器(PMUT)和超声波信号处理的可编程片上系统(SoC)集成在一起的传感器

nicole088的专栏 2796

解决Android studio app项目sqlite数据库查看问题

解决Android studio app项目sqlite数据库查看问题

swEngineer16的博客 910

H3LIS200DL三轴加速度传感器原理图设计,已量产(加速度传感器)

在最近的工业振动监测项目里,我们选了 ST 的 H3LIS200DL 做核心传感器 —— 这颗料的特点太契合场景了:±100g/200g 的大量程刚好覆盖设备冲击与振动的测量需求,10μA 的超低功耗能适配电池供电的边缘节点,0.5Hz 到 1kHz 的输出速率也足够抓准动态信号。下面结合实际画的原理图,拆解下这个硬件电路的设计思路。

不脱发的程序猿 338

Sqlite3 Unity发布安卓包出现的问题处理

解决unity安卓包运行时时遇到的sqlite数据库问题

abc1329的博客 719

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 打开 raw 数据库,Android程序中读取使用已有的SQLite数据库

方法一:先在Manifest 里添加权限:第一步先判断在指定的路劲是否存在,不存在就创建。第二步将android的资源下的数据库复制到指定路径下面。第三步就是根据指定路径打开或者创建数据库,然后得到操作数据库的对象,得到操作数据库的对象了,自然就可以对数据库中的表进行增删改查等操作了。SQLiteDatabase db;private final String DATABASE_PATH = an...

weixin_35677363的博客 368

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

分享android打开指定位置sqlite db的一个容错处理技巧

android.content.Context与android.database.sqlite.SQLiteDatabase均存在打开数据库的接口,android.content.Context里面接口最后也是需要调用到SQLiteDatabase里面相应的接口,从表征上看,使用Context里面的接口操作的是私有目录的数据库,即/data/data/下的db文件,主要提供给应用上下文使用。and

ka布 1522

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android SQLite报错

解决办法:①删除表。打开Device File Explorer,打开data,data,com.example.包名,database中的内容删除,重新运行app。②仔细检查表名,修改成与所创建的表名一致。这种错误出现的原因常见的是由于SQLite.class中的表名写错了,与数据库中的表名不一致,导致表名与创建的表的名称不同而出错。

qq_57179318的博客 836

查看安卓sqlite数据库工具:Android-Debug-Database

简要介绍 安卓开发过程中,有时需要查看sqlite数据库,核对数据.本文介绍Android-Debug-Database,非常好用. github地址:https://github.com/amitshekhariitbhu/Android-Debug-Database 功能: 支持查看手机该app的数据库和shared preference. 支持修改数据库和shared preferenc...

蓝不蓝编程 1524

Android开发中你是怎么查看sqlite数据库的

Android内置了sqlite数据库,我们在Android开发中想看自己的应用中sqlite数据库或者想查看别的应用数据库表中都有哪些内容的时候,老铁们,你们都是怎么操作的呢? 下面介绍几种比较通用的查看数据库的方式。 1. 使用Android Studio中的插件查看数据库,例如SQLScout。 安装好SQLScout插件之后,在View → Tool Windows → 可以找到 SQLite Explorer 我们想查看某个应用的数据库文件,怎么操作呢? 应用数据库文件目录 da

github_2011的博客 3万+

安卓数据库SQLite

安卓数据库SQLite

似霰的博客 7984
上一篇: android之SQLite数据库应用(一)
下一篇: 第五课:android数据相关---ContentProvider
chenzheng_java
博客等级 码龄17年 436粉丝 106原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值