2011-01-08 20 views

回答

0

您可以通過使用「.schema表名」查看錶中的列

6

的SQLite返回一個錯誤,如‘沒有這樣的列:富’如果表不包含列:

select foo from yourTable limit 1 

你也可以得到create-table語句:

select sql from sqlite_master where tbl_name = 'YourTableName' 

然後解析結果,查找列名。我不知道一個優雅的方式來查詢指定表的列表的列表,雖然可能存在。

此外,如果你試圖這樣做:

alter table YourTable add column foo {column-def whatever it is} 

你的SQLite得到一個錯誤,如果列已經存在。你也可以捕獲這個錯誤。

最後,你可以這樣做:

select sql from sqlite_master 
    where tbl_name = 'YOURTABLE' and sql like '%"foo" CHAR%'; -- or whatever type 

,如果指定的表包含由查詢雙引號包圍之列,並與該類型已指定,你會得到一個結果,否則爲空集。指定數據類型可確保您的LIKE子字符串匹配發生在列名稱上。

4

沒有辦法(我知道)在單個SQLite查詢中完成所有操作。您必須使用應用程序代碼來管理If/Elseness。

檢查表存在與否:

select count(*) from sqlite_master where type = 'table' and name = MyTable'; 

檢查表存在或現在列

pragma table_info(thumbnail); 

然而,更好的方法可能是基於架構版本的應用程序明確的數據庫架構更新維護(例如,特定的alter table語句從模式版本1到2):

pragma user_version; 
0

似乎不可能檢查列是否存在,並在一個命令中添加新列,因爲Sqlite不支持列的「IF NOT EXISTS」。 「如果不存在」只適用於桌面。 這裏是我會做什麼:

rev = ExecuteStatement("SELECT columnNamexx FROM tableNamexx limit 1;"); 

if(rev != SQLITE_OK){ // add col to table 
    ExecuteStatement("ALTER TABLE tableNamexx ADD COLUMN columnNamexx INTEGER DEFAULT 0;"); 
} 
相關問題