2011-01-08 37 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;"); 
} 
相关问题