sqlite中SQLite查看所有表名及字段名,及判断是否存在的方法

Posted luckyone906

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlite中SQLite查看所有表名及字段名,及判断是否存在的方法相关的知识,希望对你有一定的参考价值。

sqlite查看所有表名及字段名

1.   查询与判断表

查询sqlite中所有表,可用如下sql语句。原理是,sqlite中有一个内建表sqlite_master,这个表中存储这所有自建表的表名称等信息。

select name fromsqlite_master where type='table' order by name;

我们可以通过如下语句查看这个内建表的所有记录

select * fromsqlite_master;

由此可以进一步引申:判断指定的表是否存在,可以用如下语句:

selectcount(*)  from sqlite_master wheretype='table' and name = 'yourtablename';

其中yourtablename表示你要判断的表名,如果查询结果大于0,表示该表存在于数据库中,否则不存在。

2.   查询与判断列

通过以下语句可查询出某个表的所有字段信息

PRAGMA  table_info([tablename])

比如:我想查看表catalog的所有列信息,可以用下述代码,结果如图所示:

PRAGMA table_info(catalog)

3.   Sqlite中新增、删除、重命名列

3.1   新增一列

方法:使用sql命令

命令:ALTER  TABLE   table-name ADD COLUMN  column-namecolumn-type

例如:在student表中添加一列名为name,类型为varchar:

alter table student add column name varchar;

 alter table catalog add column xxx1 char(20) default '';

3.2   删除一列

方法:由于drop命令在sqlite中不可用于删除列,

alter table student drop column name // 该行在SQlite中不能用,SQlite不支持drop

可采用如下思路,类似于swap()函数的过程。

比如我有表A,A中有x、y、z三列。我要将表A中的x列删掉。那么,

第1步,新建一个表B,B中含有y、z两个字段,且类型与A中的y、z类型相同。

第2步,将A中的所有y、z两列的值拷贝到B中。

上面两步使用一句命令即可完成

create table B asselect y,z from A

注意,如果A中y的类型为char,则上面create命令会在B中创建类型为TEXT的y列。即char类型会被改变。

第3步,将A表删除

drop table ifexists A

第4步,将B重命名为A

alter table Brename to A

3.3   重命名一列

方法:与删除一列相同,在sqlite中alter同样无法重命名一列。如果想重命名,那么思路与删除一列相同。

4.   Sqlite中新增、删除、重命名表

Sql语句在3.2中已有。整理如下。

4.1   新增表

create table A(id char(20),channeltext,name text,primary key (id))

create table B as select y,z from A

4.2   删除表

drop table if exists A

4.3   重命名表

alter table B rename to A

SQLServer 获得所有表结构(包括表名及字段)

 1 SELECT (case when a.colorder=1 then d.name else null end) 表名,  
 2 a.colorder 字段序号,a.name 字段名,
 3 (case when COLUMNPROPERTY( a.id,a.name,IsIdentity)=1 then else ‘‘ end) 标识, 
 4 (case when (SELECT count(*) FROM sysobjects  
 5 WHERE (name in (SELECT name FROM sysindexes  
 6 WHERE (id = a.id) AND (indid in  
 7 (SELECT indid FROM sysindexkeys  
 8 WHERE (id = a.id) AND (colid in  
 9 (SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))  
10 AND (xtype = PK))>0 then  else ‘‘ end) 主键,b.name 类型,a.length 占用字节数,  
11 COLUMNPROPERTY(a.id,a.name,PRECISION) as 长度,  
12 isnull(COLUMNPROPERTY(a.id,a.name,Scale),0) as 小数位数,(case when a.isnullable=1 then else ‘‘ end) 允许空,  
13 isnull(e.text,‘‘) 默认值,isnull(g.[value],  ) AS [说明]
14 FROM  syscolumns a 
15 left join systypes b on a.xtype=b.xusertype  
16 inner join sysobjects d on a.id=d.id and d.xtype=U and d.name<>dtproperties 
17 left join syscomments e on a.cdefault=e.id  
18 left join sys.extended_properties g on a.id=g.major_id AND a.colid=g.minor_id
19 left join sys.extended_properties f on d.id=f.class and f.minor_id=0
20 where b.name is not null
21 --WHERE d.name=‘要查询的表‘ --如果只查询指定表,加上此条件
22 order by a.id,a.colorder

获得所有数据库表名:

SELECT name FROM SysObjects Where XType=‘U‘ ORDER BY Name

  

以上是关于sqlite中SQLite查看所有表名及字段名,及判断是否存在的方法的主要内容,如果未能解决你的问题,请参考以下文章

sql server2008如何查询在指定的数据库中所有的表名和每个表的字段名及字段类型

hibernate 直接通过表名,获取字段名及字段类型??

iOS学习笔记14-sqlite数据库初探

sqlite

数据库小记:根据指定名称查询数据库表名及根据指定名称查询数据库所有表中的字段名称(支持mysql/postgre)

sqlite方法-2.0