安卓学习日志 Day15 — 数据库基础

本文介绍了 Android 开发中的数据持久化,重点讲解了 SQLite 数据库的基础知识,包括安装、使用、数据类型以及 CRUD 操作。通过示例展示了如何在 SQLite 中创建数据库和表格,以及如何插入、查询、更新和删除数据。同时还提到了 SQLite 数据库在安卓应用中的重要性和应用场景。
摘要由CSDN通过智能技术生成

概述

目前为止,已经构建了各个不同的应用,也可能正急于构建自己的应用,但或许没有具体的想法。一个很好的练习方法是询问下当地的小商店或非盈利机构,看看他们是否需要帮助构建一个 Android 应用。

周围有很多的小商店都需要向用户提供信息,例如餐厅里的菜单、干洗店和裁缝店需要列出可以提供的服务。

还有更多类似的例子,需要将这些数据存储到某个地方,例如应用中 以便随时随地地访问这些数据。用户可以使用这一应用,店内人员也可以使用这一应用来管理日常事物或跟踪库存情况。

之后将研究一个示例,为一个收容所的工作人员开发一款移动应用,帮助他们记录各种不同的宠物。学习一个构建数据的强大方式,构建一款应用来利用这一结构,从而允许用户(店内工作人员)轻松获取每个宠物的信息,并能够对这些信息执行操作。

数据持久性

数据持久性,简单地说就是将数据永久的存储起来,而实现持久化。

在之前的应用中,数据均保存在变量当中,而变量定义在 Activity 的内部,这就意味着变量 与 Activity 的生命周期相同,假如在应用运行的过程中用户动态的改变了变量的值,这时,每当 Activity 重新加载一次,内部的变量就会重新创建一次(变量的值就会变为默认值,而非用户动态更改的值),这是因为没有数据持久化。

对于即将要构建的 宠物应用也是如此,如果我们没有合理地存储输入到应用中的宠物信息,一旦 Activity 不再运行 这些信息就会丢失。

不同的存储类型选择

Android 使用的文件系统类似于其他平台上基于磁盘的文件系统。该系统为您提供了以下几种保存应用数据的选项:

  • 应用专属存储空间:存储仅供应用使用的文件,可以存储到内部存储卷中的专属目录或外部存储空间中的其他专属目录。使用内部存储空间中的目录保存其他应用不应访问的敏感信息。
  • 共享存储:存储您的应用打算与其他应用共享的文件,包括媒体、文档和其他文件。
  • 偏好设置:以键值对形式存储私有原始数据。
  • 数据库:使用 Room 持久性库将结构化数据存储在专用数据库中。

可以看出 Android 应用中的文件存储方式主要分为三类:文件存储(应用专属存储空间或共享存储)、偏好设置(SharedPreferences)、数据库(Room、SQLite)。

下面有四种应用场景:

  1. “Video Everywhere”应用可以让你在度假的时候拍摄短片,并自动根据你去过的地点和拍摄短片的日期绘制一张地图。你该如何存储这些短片呢?

    **答案:**文件存储

  2. “Baking Conversion”应用可以对烘焙中遇到的各种单位进行转换,例如杯数转换成毫升,汤匙数转换为杯数。你该如何存储用户的单位偏好设置?

    **答案:**偏好设置

  3. “Music Share”应用可以使你购买和下载歌曲用于任何应用。你该如何存储这些歌曲?

    **答案:**文件存储

  4. 假设有一款应用可以存储进入收容所的宠物信息。你会使用什么来存储宠物信息?

    **答案:**数据库

还有一种情况,应用会同时使用不止一种的数据持久化方式。

现实生活中的数据库

到目前为止,已经见过两个在现实生活中用到数据库的示例:宠物收容所会存储关于动物的数据,以及在线零售商会存储关于库存的数据。

日程生活中,有各种需要采用数据库结构来存储信息的示例。下面再举两个例子。

银行账户

银行不仅非常依赖于关于用户的信息,还需要收集关于全球市场的信息,这样才能立足市场。可以想象出他们的数据库需要使用多个表格来汇总相关数据。

例如,他们会使用一个表格来记录单个用户的信息,例如用户 ID、支票账号、支票账户金额、储蓄账号、储蓄账户金额、用户的地址、用户的生日、用户名、密码等。还可能会使用另一个表格来记录更加通用的信息,例如货币汇率、信用卡利率、贷款利率等。

这些数据库中的信息都需要接受严密的监督,因为这些信息太重要了。听过“网络安全”一词吗?组织机构会专门设立一个部门来确保这些数据库的信息安全性。

航空公司

如果你在航空公司网站上预订过机票,经常就会需要输入飞行常客号码。航空公司可以利用该数据在存储客户信息的数据库表格中进行搜索,查找关于客户的其他信息。

该表格可能包含其他客户信息,例如姓名、地址、电话号码、飞行常客号码、信用卡信息、航班号码、座位号码等。

此外,航空公司需要表格来存储关于每日航班的信息。这些表格可能包含以下数据:飞机号、起飞机场、抵达机场、已售座位数、起飞时间、抵达时间、中转航班等。

航空公司会使用多个不同表格里的信息来帮助你选出抵达目的地最安全高效的方式。

SQLite 数据库

SQLite 是 Android 自带的数据库,不需要下载或安装任何内容就能在 Android 应用中使用 SQLite,虽然手机已经具有了 SQLite,但是计算机并没有预装 SQLite。

安装 SQLite

Windwos

Windows 系统中没有预装 SQLite 数据库系统,需要自行安装。

  1. 下载正确的 zip 文件。
  2. 创建一个文件夹,叫做 C:>sqlite,并将 zip 文件解压缩到这里面。
  3. 将 C:>sqlite 添加到你的 PATH 环境变量里。
  4. 在命令提示符窗口里输入 sqlite3 命令。

详细了解下这几个步骤。

要下载正确的文件,你需要转到此处并下载下面这两个文件:

sqlite-shell-win32-*.zipsqlite-dll-win32-*.zip

将这两个文件下载到计算机上后,打开 Windows 资源管理器并转到 C 盘,然后创建一个文件夹,叫做“sqlite”。将下载的 .zip 文件复制到该文件夹里,然后解压缩了。

完成上述操作后,你需要将 C:>sqlite 添加到系统的 PATH 环境变量里。如果你从未执行过这一操作,请按照这些步骤来操作。

最后,需要打开命令提示符程序,并输入 sqlite3,然后按下 Enter 键。

Mac OS X

最新版本的 OS X 已经预装了 SQLite,所以可能不需要执行任何操作。要查看是否预装了 SQLite,打开终端程序(可以从桌面的右上角找到该程序),输入 sqlite3,然后按下 Enter 键。如果出现的结果中包含“SQLite 版本”和一些数字,那就很幸运,预装了!

如果没有,则需要自己手动安装。为此,你需要下载相关文件,在终端程序中输入一些命令。

首先转到 此处 并下载 sqlite-autoconf-*.tar.gz。

然后打开终端,并输入以下命令。注意 $ 符号表示一行的开头位置,不需要输入。例如,对于最后一行,只需要输入“make install”,然后按下 Enter 键。

  $tar xvfz sqlite-autoconf-3071502.tar.gz
  $cd sqlite-autoconf-3071502
  $./configure --prefix=/usr/local
  $make
  $make install

输入这些命令后,Mac 上就安装好 SQLite 了!

第一次打开 SQLite

sqlite3 在命令提示符窗口里打开 sqlite3 程序的命令。

sqlite3 shelter.db 打开 sqlite3 程序并直接打开以下数据库文件的命令。可以将 shelter.db 替换为任何现有的数据库文件。

.open shelter.db sqlite 在程序中用来打开数据库文件的命令。在这里,打开的是 shelter.db 文件。可以将 shelter.db 替换为任何现有的其他 .db 文件。

.help 调出可用命令列表的命令

.quit 退出 sqlite 应用的命令

Windows 系统

echo %cd% echo 请求计算机向屏幕上输出内容。在这里,使用 %cd% 来要求计算机输出“当前目录”(即当前所处的目录)。

Mac 或 Linux系统

pwd 这一简写表示的是“当前工作目录”。和上述 Windows 命令一样,在屏幕上输出我们当前工作所处的目录。

sqlite3 在终端里打开 sqlite3 程序的命令。

SQLite 中的类型

大多数 SQL数据库引擎(据我们所知,除了SQLite之外的所有SQL数据库引擎)使用静态的、严格的类型。使用静态类型时,值的数据类型由其容器决定——存储值的特定列。SQLite 使用更通用的动态类型系统。在SQLite中,值的数据类型与值本身相关联,而不是与它的容器相关联。SQLite的动态类型系统向后兼容其他数据库引擎更常见的静态类型系统,因为在静态类型数据库上工作的SQL语句在SQLite中应该以同样的方式工作。然而,SQLite中的动态类型允许它做一些在传统的严格类型数据库中不可能做的事情。

存储在SQLite数据库中的每个值(或由数据库引擎操作)都有以下存储类之一:

  • NULL:表示空值
  • INTEGER:该值是一个有符号整数,根据值的大小存储在1、2、3、4、6或8个字节中。
  • REAL:该值为浮点值,存储为8字节的IEEE浮点数。
  • TEXT:文本字符串,使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储。
  • BLOB:该值是一组数据,存储方式与输入时完全相同。

SQLite没有单独的布尔存储类。相反,布尔值存储为整数0 (false)和1 (true)。

存储类比数据类型更通用。例如,整数存储类包括6种不同长度的整数数据类型。这在磁盘上造成了不同。但是一旦整数值从磁盘读取到内存中进行处理,它们就会被转换为最通用的数据类型(8字节有符号整数)。因此,在大多数情况下,“存储类”与“数据类型”是无法区分的,这两

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值