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