Small. Fast. Reliable.
Choose any three.

SQLite C接口

提取有关表的列的元数据

int sqlite3_table_column_metadata(
  sqlite3 * db,/ *连接句柄* /
  const char * zDbName,/ *数据库名称或NULL * /
  const char * zTableName,/ *表名* /
  const char * zColumnName,/ *列名* /
  char const ** pzDataType,/ * OUTPUT:声明的数据类型* /
  char const ** pzCollSeq,/ * OUTPUT:整理序列名称* /
  int * pNotNull,/ *输出:如果存在NOT NULL约束,则为true * /
  int * pPrimaryKey,/ *输出:如果PK的列部分为真* /
  int * pAutoinc / * OUTPUT:如果列为自动递增,则为true * /
);

sqlite3_table_column_metadata(X,D,T,C,....)例程返回有关数据库连接X上数据库D中表T列C的信息。sqlite3_table_column_metadata()接口返回SQLITE_OK并在如果指定的列存在,则使用适当的值来最后5个参数。如果指定的列不存在,则sqlite3_table_column_metadata()接口返回SQLITE_ERROR。如果sqlite3_table_column_metadata()的column-name参数是NULL指针,则此例程仅检查表是否存在,如果表存在则返回SQLITE_OK,否则返回SQLITE_ERROR。如果对sqlite3_table_column_metadata(X,D,T,C,...)的调用中的表名参数T为NULL,则结果为未定义行为。

该列由该功能的第二,第三和第四参数标识。第二个参数是包含指定表或NULL的数据库的名称(即“ main”,“ temp”或附加的数据库)。如果为NULL,则使用数据库引擎用来解析不合格表引用的相同算法,在所有连接的数据库中搜索该表。

此函数的第三个和第四个参数分别是所需列的表名和列名。

通过写入作为该函数的第5个参数和后续参数传递的存储位置来返回元数据。这些参数中的任何一个都可以为NULL,在这种情况下,将省略元数据的相应元素。

范围 输出
类型
描述

第五名 const char * 数据类型
第六名 const char * 默认排序规则序列的名称
第七名 整型 如果列具有NOT NULL约束,则为True
第八名 整型 如果列是PRIMARY KEY的一部分,则为True
第九名 整型 如果列为AUTOINCREMENT,则为True

为声明类型和排序规则序列返回的字符指针所指向的内存在下一次​​调用任何SQLite API函数之前一直有效。

如果指定的表实际上是视图,则返回错误代码

如果指定的列是“ rowid”,“ oid”或“ _rowid_”,并且该表不是WITHOUT ROWID表,并且已显式声明了 INTEGER PRIMARY KEY列,则将为显式声明的列设置输出参数。如果没有 INTEGER PRIMARY KEY列,那么将rowid的输出设置如下:

数据类型:“ INTEGER”
整理顺序:“ BINARY”
不为零:0
主键:1
自动递增:0

如果尚未完成,此函数将导致从磁盘读取所有数据库模式并进行解析,如果在加载模式时遇到任何错误,则返回错误。

另请参见 对象常量函数的列表