小巧、快速、可靠。
三者选其二。

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,....) 函数返回关于数据库 D 中表 T 的列 C 在 数据库连接 X 上的信息。如果指定的列存在,sqlite3_table_column_metadata() 接口将返回 SQLITE_OK 并使用适当的值填充最后五个参数中的非空指针。如果指定的列不存在,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,在这种情况下,将省略相应的元数据元素。

参数输出
类型
描述

第 5 个const char*数据类型
第 6 个const char*默认排序规则序列的名称
第 7 个int如果列具有 NOT NULL 约束,则为真
第 8 个int如果列是 PRIMARY KEY 的一部分,则为真
第 9 个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

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

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