SQLite 基础知识

SQLite 基础知识

SQLite

列操作

sqlite中不支持删除列的操作,也不能够修改主键。
ALTER TABLE操作
从上图可见,SQLite官方并不支持delete或者drop列。

SQLite supports a limited subset of ALTER TABLE. The ALTER TABLE command in SQLite allows the user to rename a table or to add a new column to an existing table.

那么在SQLite中,如果需要删除某一列或者更改表的主码,需要使用创建临时表的方式进行。创建一张表结构正确的临时表,并将原表中的数据转移过去,再删除原表,重命名临时表为正确表名。下面是一个Java的例子:

List<String> sqls = new ArrayList<>();
if (isTableExist(dbManager, "XX")) {
  sqls.add("CREATE TABLE \"XX_tmp\" (\"arg0\" TEXT ,\"arg1\" TEXT ,\"arg2\" TEXT ,\"arg3\" TEXT ,\"arg4\" TEXT PRIMARY KEY ,\"attflag\" TEXT ,\"attmsg\" TEXT );"); 
  sqls.add("INSERT INTO XX_tmp SELECT * FROM XX;");
  sqls.add("DROP TABLE XX;");
  sqls.add("ALTER TABLE XX_tmp RENAME TO XX;");
  dbManager.getDatabase().beginTransaction();
  for (String sql : sqls)
    dbManager.execNonQuery(sql);
  dbManager.getDatabase().endTransaction();
  U.L.d(TAG, "用户数据库第一次升级完成:修改XX表的主键!");
}

PRAGMA Statements

SQLite 的 PRAGMA 命令是一个特殊的命令,可以用在 SQLite 环境内控制各种环境变量和状态标志。

sqlite_master

SQLite数据库中一个特殊的名叫 SQLITE_MASTER 上执行一个SELECT查询以获得所有表的索引。每一个 SQLite 数据库都有一个叫 SQLITE_MASTER 的表, 它定义数据库的模式。

type值为table表示对应的是表记录,type值为index表示对应的是索引的记录。
最后一栏列名为“sql”,存储的是创建表或者索引时的原始sql命令。如果index是自动生成的,那么sql为空。
sqlite_master表是只读表,不能手工进行内容修改。

sqlite_master.png

查询数据库中是否存在某张表,或者查询数据库中所有的表可用如下方式:

--查询是否存在table_name这张表,实际上是查询有几个table_name表名存在,返回0则不存在,1则存在。
SELECT count(*) AS c
FROM sqlite_master
WHERE TYPE ='table'
  AND name ='table_name';

--查询数据库中所有的表
SELECT name AS TABLE_NAME
FROM sqlite_master
WHERE TYPE='table';

上面用到的isTableExist(DbManager dbManager, String tableName)方法如下:

//判断表是否存在
protected final boolean isTableExist(DbManager dbManager, String tableName) {
    boolean isExist = false;
    String sql = "SELECT COUNT(*) AS c FROM sqlite_master WHERE TYPE ='table' AND NAME ='" + tableName + "';";
    try {
        Cursor mCursor = dbManager.execQuery(sql);
        if (mCursor.moveToNext()) {
            int count = mCursor.getInt(0);
            if (count > 0) {
                isExist = true;
            }
        }
    } catch (DbException e) {
        e.printStackTrace();
    }
    return isExist;
}

临时表不会出现在 SQLITE_MASTER 表中。临时表及其索引和触发器存放在另外一个叫 SQLITE_TEMP_MASTER 的表中。SQLITE_TEMP_MASTER 跟 SQLITE_MASTER 差不多, 但它只是对于创建那些临时表的应用可见。如果要获得所有表的列表, 不管是永久的还是临时的,可以使用类似下面的命令:
“`sql
SELECT name
FROM
(SELECT *
FROM sqlite_master
UNION ALL SELECT *
FROM sqlite_temp_master)
WHERE TYPE=’TABLE’


## SQLite 表复制
* 复制整张表,包括表里面的数据。
```sql
CREATE TABLE affix_backup AS SELECT * FROM affix;




<div class="se-preview-section-delimiter"></div>
  • 只复制表结构,不复制内容。
CREATE TABLE affix_backup AS SELECT * FROM affix where 1=0;




<div class="se-preview-section-delimiter"></div>
  • 内容复制(SQLite不支持第一种)。
--把数据插入一张新建立的表中,这张表是执行sql的时候建立的。
SELECT ... INTO new_tablename
FROM ...
WHERE ...
--或者
--把查询出来的数据插入已经建立好的表中
INSERT INTO tmp_tablename
SELECT ...
FROM ...
WHERE ...
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 基础知识包括以下内容: 1. Android 是什么? Android 是一个开源的操作系统,主要用于移动设备,例如智能手机和平板电脑。它由 Google 公司开发并维护,基于 Linux 内核,并提供了丰富的应用程序框架。 2. Android 应用程序的结构 Android 应用程序由四个主要组件构成:活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供程序(Content Provider)。这些组件可以协同工作来创建丰富的用户体验。 3. Android 应用程序的开发语言 Android 应用程序可以使用 Java、Kotlin 或 C++ 进行开发。Java 是最常用的开发语言,但 Kotlin 正在逐渐流行起来。 4. Android 开发工具 Android 开发工具包(Android SDK)是 Android 开发所需的一套工具和库。其中包括 Android Studio(集成开发环境)、Android 调试桥(ADB)、模拟器和设备驱动程序等。 5. Android 布局和用户界面 Android 使用 XML 文件来定义应用程序的布局和用户界面。开发者可以使用一系列的布局容器和视图控件来创建灵活的界面。 6. Android 数据存储 Android 提供了多种数据存储选项,包括 Shared Preferences(用于存储简单的键值对)、文件存储、SQLite 数据库和网络存储(如使用 Retrofit 进行网络请求)。 7. Android 权限管理 Android 应用程序需要获取用户权限才能访问特定功能或数据。开发者需要在应用程序清单文件中声明所需的权限,并在运行时进行权限请求和处理。 这些是 Android 基础知识的一些要点,希望对你有所帮助!如果你还有其他问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值