使用SQLite保存数据

本文基本内容是对于官方文档Save data using SQLite的瞎JB翻译,以及优达学城安卓基础最后一门数据存储学习的记录。SQL过于底层,官方推荐Room库。 这篇文章里有两条时间线,一条是官网文档里的样例代码FeedReeder,还有一条是Udacity的课程项目Pet。 Step 1. Define a schema and contract Schema 是SQL数据库的原则之一,他定义了数据库如何组织数据。Schema也反映在创建数据库的SQL语句中。您可能会发现创建一个伴随类(称为 contract class)会很有帮助,该类系统且明确地指定了schema的层次布局。 一些常量定义了URI,表和列的名称,contract类正是这些常量的容器。您可以在同一包的所有其他类中使用contract类中定义的常量。这样一来,修改表结构时,您只需在contract类中更改常量的值即可。 组织contract类的一种好方法是将数据库的全局定义放在类的根级别。然后为每个表创建一个内部类。每个内部类枚举相应表的列。 第一步大概的意思就是你得确定数据库的架构,写一个Contract类来体现这种架构(这不是必须的,但是写了会方便)。举一个栗子,裸写一个SQL语句大概长这样 然后看文档里的案例,我们先写一个contract类,现在只需要知道这里定义了一些常量。 我们用上面那些常量再写一个SQL语句(一般会写在帮助类里面) 看上去便麻烦了,但是有智能提示啊!而且当你想修改某个字段时,只需要修改常量的值就可以。如果你不用常量,就得修改整个代码中所有用到这个字段的地方。毕竟我没那个神仙水平看得懂aaabbb000111ttuuvvbtn1234567 总结一下contract类的三个用处 1、帮助定义了(体现了)schema,在这里定义了常量,我们可以方便地找到这些常量 2、减少在SQL语句中的拼写错误 3、便于更新 接下来,阅读代码,回答以下问题 (这个是课程中的一道习题) 1.这个天气应用数据库里有多少张表? 2.WeatherEntry对应的表,在SQLite数据库中的表名是什么? 3.问题2那张表中有多少列?(不包括_ID和_COUNT) 4.有一个常量对应的字段是weather condition的short description,这个常量是什么? 2张表,58行位置表,90行天气表 weather,100行 10,103-127行 COLUMN_SHORT_DESC,在111行 下面是课程中Pet项目的一些操作 Step 2. Create a database using an SQL helper SQLiteOpenHelper类包含一组有用的API,用于管理数据库。当您使用此类获取对数据库的引用时,系统仅在需要时才执行创建和更新数据库的操作(可能花费很长时间运行),而不是在应用程序启动期间执行。您需要做的就是调用getWritableDatabase()或getReadableDatabase()。 要使用SQLiteOpenHelper,请创建一个重写onCreate()和onUpgrade()回调方法的子类。您可能还想实现onDowngrade()或onOpen()方法,但不是必需的。 类似的,实现PetDbHelper类 没有权限就先复制一个临时的类,用来展示信息,仔细阅读代码就知道怎么操作数据库了 Step 3. CRUD 3.1 Create […]