如何获得sqlite3 / iPhone上的列名称列表?

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

这个Stackoverflow条目build议做select

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

并parsing结果。

这是常用的方法吗? 备择scheme?

 PRAGMA table_info(table_name); 

会给你一个列名的所有列。

如果你有sqlite数据库,使用sqlite3命令行程序和这些命令:

要列出数据库中的所有表:

 .tables 

要显示给定tablename的模式:

 .schema tablename 

只是像我这样的超级新手想知道人们的意思是什么或者什么意思

 PRAGMA table_info('table_name') 

你想使用这个作为你的准备声明,如下所示。 这样做会select一个看起来像这样的表格,除了填充与表格有关的值。

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

其中id和name是您的列的实际名称。 所以要获得这个值,你需要使用下面的方法select列名:

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

这将返回当前行的列名称。 要全部抓住它们或find你想要的,你需要迭代所有的行。 最简单的方法是按照下面的方式。

 //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 } } 

如果你这样做

 .headers ON 

你会得到期望的结果。

如果您正在search任何特定的列,则可以使用Like语句

例如:

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

为了获得列信息,你可以使用下面的代码片段:

 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); } 
 //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; } 
 -(NSMutableDictionary*)tableInfo:(NSString *)table { sqlite3_stmt *sqlStatement; NSMutableDictionary *result = [[NSMutableDictionary alloc] init]; const char *sql = [[NSString stringWithFormat:@"pragma table_info('%s')",[table UTF8String]] UTF8String]; if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) { NSLog(@"Problem with prepare statement tableInfo %@",[NSString stringWithUTF8String:(const char *)sqlite3_errmsg(db)]); } while (sqlite3_step(sqlStatement)==SQLITE_ROW) { [result setObject:@"" forKey:[NSString stringWithUTF8String:(char*)sqlite3_column_text(sqlStatement, 1)]]; } return result; } 

我知道这太迟了,但这会对其他人有帮助。

要查找表的列名称,应执行“select * from tbl_name”,您将在“sqlite3_stmt *”中得到结果。 并检查列遍历总提取列。 请参考下面的代码。

 // sqlite3_stmt *statement ; int totalColumn = sqlite3_column_count(statement); for (int iterator = 0; iterator<totalColumn; iterator++) { NSLog(@"%s", sqlite3_column_name(statement, iterator)); } 

这将打印结果集的所有列名称。

.schema在sqlite控制台,当你在桌子里面,它看起来像这样的我…

 sqlite>.schema CREATE TABLE players( id integer primary key, Name varchar(255), Number INT, Team varchar(255)