对于此示例数据库:
create table atable (
textfield varchar(256)
);
create view aview as select T.textfield from atable T;
并选择:
select T.textfield from atable T;
select T.textfield from aview T;
调用sqlite的sqlite3_column_name(...)
会在视图和表上选择不同的结果。如果是表,则不包括别名,如果是查看的话。
结果如下:
table query - sqlite3_column_name (db, 0) -> "textfield"
view query - sqlite3_column_name (db, 0) -> "T.textfield"
为什么这些不同?
答案 0 :(得分:4)
令人惊讶的是,SQLITE不保证sqlite_3_column_name
返回的列名称,除非您使用AS
关键字专门提供名称。
来自sqlite3_column_name
功能文档:
结果列的名称是“AS”子句的值 列,如果有AS子句。如果没有AS子句那么 列的名称未指定,可能会从一个版本更改 SQLite到下一个。
因此,如果要依赖返回的值,则必须手动指定列名。将您的查询更改为:
select T.textfield as textfield from atable T;
select T.textfield as textfield from aview T;
并且在这两种情况下sqlite3_column_name
都会返回textfield
。