Dre*_*all 36 database sqlite schema
对于踢,我正在编写一个"模式文档"工具,用于生成数据库中表和关系的描述.我目前正在填补它与SQLite合作.
我已经设法通过sqlite_master
表上的查询提取SQLite数据库中所有表的名称.对于每个表名,我然后触发一个简单的名称
select * from <table name>
Run Code Online (Sandbox Code Playgroud)
查询,然后使用sqlite3_column_count()
和sqlite3_column_name()
API收集列名称,我进一步提供sqlite3_table_column_metadata()
以获取其他信息.很简单吧?
问题是它只适用于非空的表.也就是说,sqlite_column_*()
API仅sqlite_step()
在返回时才有效SQLITE_ROW
,而空表不是这种情况.
所以问题是,我如何发现空表的列名?或者,更一般地说,是否有更好的方法在SQLite中获取此类模式信息?
我觉得必须有另一个隐藏的sqlite_xxx
表隐藏在包含这些信息的地方,但到目前为止还没有找到它.
小智 62
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
Run Code Online (Sandbox Code Playgroud)
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;
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
43705 次 |
最近记录: |