当前位置:  开发笔记 > 编程语言 > 正文

在空表中查找SQLite列名称

如何解决《在空表中查找SQLite列名称》经验,为你挑选了3个好方法。

对于踢,我正在编写一个"模式文档"工具,用于生成数据库中表和关系的描述.我目前正在填补它与SQLite合作.

我已经设法通过sqlite_master表上的查询提取SQLite数据库中所有表的名称.对于每个表名,我然后触发一个简单的名称

select * from 

查询,然后使用sqlite3_column_count()sqlite3_column_name()API收集列名称,我进一步提供sqlite3_table_column_metadata()以获取其他信息.很简单吧?

问题是它只适用于非空的表.也就是说,sqlite_column_*()API仅sqlite_step()在返回时才有效SQLITE_ROW,而空表不是这种情况.

所以问题是,我如何发现空表的列名?或者,更一般地说,是否有更好的方法在SQLite中获取此类模式信息?

我觉得必须有另一个隐藏的sqlite_xxx表隐藏在包含这些信息的地方,但到目前为止还没有找到它.



1> 小智..:
sqlite> .header on
sqlite> .mode column
sqlite> create table ABC(A TEXT, B VARCHAR);
sqlite> pragma table_info(ABC);
cid         name        type        notnull     dflt_value  pk
----------  ----------  ----------  ----------  ----------  ----------
0           A           TEXT        0                       0
1           B           VARCHAR     0                       0


看起来像在命令行上工作 - 如何以编程方式实现相同的效果?
@pragmanatu是你的昵称巧合吗?:)

2> Nick Dandoul..:

执行查询:

PRAGMA table_info( your_table_name );

文档



3> GeekTantra..:

PRAGMA table_info( your_table_name ); 在HTML5 SQLite中不起作用。

这是一个小的HTML5 SQLite JavaScript代码段,即使您的列为空,它也会从your_table_name获取列名。希望对您有所帮助。

tx.executeSql('SELECT name, sql FROM sqlite_master WHERE type="table" AND name = "your_table_name";', [], function (tx, results) {
  var columnParts = results.rows.item(0).sql.replace(/^[^\(]+\(([^\)]+)\)/g, '$1').split(',');
  var columnNames = [];
  for(i in columnParts) {
    if(typeof columnParts[i] === 'string')
      columnNames.push(columnParts[i].split(" ")[0]);
  }
  console.log(columnNames);
  ///// Your code which uses the columnNames;
});

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有