SQLite C 接口

提取关于表的列的元数据

int sqlite3_table_column_metadata(
  sqlite3 *db,                /* Connection handle */
  const char *zDbName,        /* Database name or NULL */
  const char *zTableName,     /* Table name */
  const char *zColumnName,    /* Column name */
  char const **pzDataType,    /* OUTPUT: Declared data type */
  char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
  int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
  int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
  int *pAutoinc               /* OUTPUT: True if column is auto-increment */
);

sqlite3_table_column_metadata(X,D,T,C,....)例程在数据库连接X上返回 数据库D中表T的列C的信息。sqlite3_table_column_metadata()接口返回SQLITE_OK并填充非NULL指针在如果指定的列存在,则返回具有适当值的最后五个参数。如果指定的列不存在,sqlite3_table_column_metadata() 接口返回 SQLITE_ERROR。如果 sqlite3_table_column_metadata() 的列名参数是一个 NULL 指针,那么这个例程只是检查表是否存在,如果表存在则返回 SQLITE_OK,如果不存在则返回 SQLITE_ERROR。如果调用 sqlite3_table_column_metadata(X,D,T,C,...) 时表名参数 T 为 NULL,则结果为未定义行为。

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

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

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

范围输出
类型
描述

5th const char* 数据类型
6th const char* 默认归类序列的名称
7th int 如果列具有 NOT NULL 约束则为真
8th int 如果列是 PRIMARY KEY 的一部分则为真
9th int 如果列是AUTOINCREMENT则为真

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

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

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

data type: "INTEGER"
collation sequence: "BINARY"
not null: 0
primary key: 1
auto increment: 0

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

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