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

如何在sqlite3/iPhone上获取列名列表?

如何解决《如何在sqlite3/iPhone上获取列名列表?》经验,为你挑选了11个好方法。

我想将我的iPhone应用程序迁移到新的数据库版本.由于我没有保存某些版本,我需要检查是否存在某些列名.

此Stackoverflow条目建议执行select

SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'

并解析结果.

这是常见的方式吗?备择方案?



1> nevan king..:
PRAGMA table_info(table_name);

将为您提供所有列名称的列表.


但你不能从那张桌子中选择.这简直太烦人了.我正在尝试这样的东西...但它不起作用`创建临时表TmpCols(cid整数,名称文本,类型文本,nn位,dflt_value,pk位); .mode insert TmpCols .output cols PRAGMA TABLE_INFO('yourtable'); .read cols .mode csv .output stdout`
这也适用于View.PRAGMA table_info(View_Name); 这将列出视图的所有列

2> 小智..:

如果您有sqlite数据库,请使用sqlite3命令行程序和以下命令:

列出数据库中的所有表:

.tables

要显示给定的架构tablename:

.schema tablename


@NickTomlin不幸的是,这个方法需要使用sqlite3命令行程序,因为dot命令不是有效的SQL.
虽然输出不是"可读"(也许),但这比`PRAGMA table_info(table_name)更容易记住;

3> 小智..:

如果你这样做

.headers ON

你会得到理想的结果.


并始终将其打开,将其放入[你的`.sqliterc`文件](/sf/ask/17360801/).
如何将标题与下面的内容对齐?

4> Birdbuster..:

只为像我这样的超级新人想知道人们的意思或方式

PRAGMA table_info('table_name') 

您想使用它作为您的准备语句,如下所示.这样做会选择一个看起来像这样的表,除了填充了与您的表有关的值.

cid         name        type        notnull     dflt_value  pk        
----------  ----------  ----------  ----------  ----------  ----------
0           id          integer     99                      1         
1           name                    0                       0

其中id和name是列的实际名称.因此,要获得该值,您需要使用以下选项来选择列名:

//returns the name
sqlite3_column_text(stmt, 1);
//returns the type
sqlite3_column_text(stmt, 2);

这将返回当前行的列名称.要抓住它们或找到你想要的那个,你需要迭代所有的行.最简单的方法是采用以下方式.

//where rc is an int variable if wondering :/
rc = sqlite3_prepare_v2(dbPointer, "pragma table_info ('your table name goes here')", -1, &stmt, NULL);

if (rc==SQLITE_OK)
{
    //will continue to go down the rows (columns in your table) till there are no more
    while(sqlite3_step(stmt) == SQLITE_ROW)
    {
        sprintf(colName, "%s", sqlite3_column_text(stmt, 1));
        //do something with colName because it contains the column's name
    }
}



5> Owen Pauling..:

如果希望查询的输出包含列名并正确对齐为列,请在sqlite3以下位置使用以下命令:

.headers on
.mode column

您将获得如下输出:

sqlite> .headers on
sqlite> .mode column
sqlite> select * from mytable;
id          foo         bar
----------  ----------  ----------
1           val1        val2
2           val3        val4



6> 小智..:

如果要搜索任何特定列,可以使用Like语句

例如:

SELECT * FROM sqlite_master where sql like('%LAST%')



7> Sam Houston..:

当您运行sqlite3cli时,键入:

sqlite3 -header

也会给出理想的结果



8> 小智..:

要获取列列表,您可以简单地使用:

.schema tablename



9> Devolus..:

要获取列信息,您可以使用以下代码段:

String sql = "select * from "+oTablename+" LIMIT 0";
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(sql);
ResultSetMetaData mrs = rs.getMetaData();
for(int i = 1; i <= mrs.getColumnCount(); i++)
{
    Object row[] = new Object[3];
    row[0] = mrs.getColumnLabel(i);
    row[1] = mrs.getColumnTypeName(i);
    row[2] = mrs.getPrecision(i);
}



10> Dattatray De..:
//JUST little bit modified the answer of giuseppe  which returns array of table columns
+(NSMutableArray*)tableInfo:(NSString *)table{

    sqlite3_stmt *sqlStatement;

    NSMutableArray *result = [NSMutableArray array];

    const char *sql = [[NSString stringWithFormat:@"PRAGMA table_info('%@')",table] UTF8String];

    if(sqlite3_prepare(md.database, sql, -1, &sqlStatement, NULL) != SQLITE_OK)

    {
        NSLog(@"Problem with prepare statement tableInfo %@",
                [NSString stringWithUTF8String:(const char *)sqlite3_errmsg(md.database)]);

    }

    while (sqlite3_step(sqlStatement)==SQLITE_ROW)
    {
        [result addObject:
          [NSString stringWithUTF8String:(char*)sqlite3_column_text(sqlStatement, 1)]];
    }

    return result;
}



11> user1461607..:

获取此处未提及的列名列表的另一种方法是从编译指示函数中进行选择:

SELECT name FROM PRAGMA_TABLE_INFO('your_table');
name      
tbl_name  
rootpage  
sql

您可以通过运行以下命令检查某个列是否存在:

SELECT 1 FROM PRAGMA_TABLE_INFO('your_table') WHERE name='sql';
1

如果不想解析来自sqlite_master或pragma table_info的select sql的结果,则使用此方法。

参考:

https://www.sqlite.org/pragma.html#pragfunc

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