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