SQLite

作者: Cursor_fei | 来源:发表于2017-02-04 11:10 被阅读103次

SQLite 基础知识

SQLite

列操作

sqlite中不支持删除列的操作,也不能够修改主键。


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 差不多, 但它只是对于创建那些临时表的应用可见。如果要获得所有表的列表, 不管是永久的还是临时的,可以使用类似下面的命令:

SELECT name
FROM
 (SELECT *
  FROM sqlite_master
  UNION ALL SELECT *
  FROM sqlite_temp_master)
WHERE TYPE=’TABLE’

SQLite 表复制

  • 复制整张表,包括表里面的数据。
CREATE TABLE affix_backup AS SELECT * FROM affix;
  • 只复制表结构,不复制内容。
CREATE TABLE affix_backup AS SELECT * FROM affix where 1=0;
  • 内容复制(SQLite不支持第一种)。
--把数据插入一张新建立的表中,这张表是执行sql的时候建立的。
SELECT ... INTO new_tablename
FROM ...
WHERE ...
--或者
--把查询出来的数据插入已经建立好的表中
INSERT INTO tmp_tablename
SELECT ...
FROM ...
WHERE ...

相关文章

网友评论

      本文标题:SQLite

      本文链接:https://www.haomeiwen.com/subject/ymupsttx.html