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 ...
网友评论