descargar - ¿Cómo obtener una lista de nombres de columna en sqlite3/iPhone?
sqlite3 doc (14)
Quiero migrar mi aplicación de iPhone a una nueva versión de base de datos. Como no tengo alguna versión guardada, debo comprobar si existen ciertos nombres de columna.
Esta entrada de Stackoverflow sugiere hacer la selección
SELECT sql FROM sqlite_master
WHERE tbl_name = ''table_name'' AND type = ''table''
y analizar el resultado.
¿Es esa la forma común? ¿Alternativas?
.schema en la consola sqlite cuando tienes que estar dentro de la mesa, se ve algo así para mí ...
sqlite>.schema
CREATE TABLE players(
id integer primary key,
Name varchar(255),
Number INT,
Team varchar(255)
Cuando ejecute el cli de sqlite3
, escriba:
sqlite3 -header
También dará el resultado deseado.
Para obtener la información de la columna, puede utilizar el siguiente fragmento de código:
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);
}
Sé que es demasiado tarde pero esto ayudará a otros.
Para encontrar el nombre de la columna de la tabla, debe ejecutar select * from tbl_name
y obtendrá el resultado en sqlite3_stmt *
. y verifique la iteración de la columna sobre la columna total recuperada. Por favor, consulte el siguiente código para el mismo.
// sqlite3_stmt *statement ;
int totalColumn = sqlite3_column_count(statement);
for (int iterator = 0; iterator<totalColumn; iterator++) {
NSLog(@"%s", sqlite3_column_name(statement, iterator));
}
Esto imprimirá todos los nombres de columna del conjunto de resultados.
Si desea que la salida de sus consultas incluya nombres de columnas y se alinee correctamente como columnas, use estos comandos en sqlite3
:
.headers on
.mode column
Obtendrá salida como:
sqlite> .headers on
sqlite> .mode column
sqlite> select * from mytable;
id foo bar
---------- ---------- ----------
1 val1 val2
2 val3 val4
Si lo haces
.headers ON
Obtendrá el resultado deseado.
Si tiene la base de datos sqlite, use el programa de línea de comandos sqlite3 y estos comandos:
Para listar todas las tablas en la base de datos:
.tables
Para mostrar el esquema de un nombre de tablename
dado:
.schema tablename
Solo para súper noobs como yo preguntándome cómo o qué significaba la gente
PRAGMA table_info(''table_name'')
Desea utilizar usar eso como su declaración de preparación como se muestra a continuación. Al hacerlo, selecciona una tabla que se ve así, excepto que se llena con los valores que pertenecen a su tabla.
cid name type notnull dflt_value pk
---------- ---------- ---------- ---------- ---------- ----------
0 id integer 99 1
1 name 0 0
Donde id y nombre son los nombres reales de sus columnas. Entonces, para obtener ese valor, debe seleccionar el nombre de la columna usando:
//returns the name
sqlite3_column_text(stmt, 1);
//returns the type
sqlite3_column_text(stmt, 2);
Lo que devolverá el nombre de la columna de la fila actual. Para capturarlos a todos o encontrar el que desee, debe recorrer todas las filas. La forma más sencilla de hacerlo sería de la siguiente manera.
//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
}
}
Tal vez solo desee imprimir los encabezados de la tabla en la consola. Este es mi código: (para cada tabla)
// ------------------ show header ----------------
char sqlite_stmt_showHeader[1000];
snprintf(sqlite_stmt_showHeader, 1000, "%s%s", "SELECT * FROM ", TABLE_NAME_STRING UTF8String]);
sqlite3_stmt* statement_showHeader;
sqlite3_prepare_v2(DATABASE, sqlite_stmt_showHeader, -1, &statement_showHeader, NULL);
int headerColumnSize = sqlite3_column_count(statement_showHeader);
NSString* headerRow = @"|";
for (int j = 0; j < headerColumnSize; j++) {
NSString* headerColumnContent = [[NSString alloc] initWithUTF8String:(const char*)sqlite3_column_name(statement_showHeader, j)];
headerRow = [[NSString alloc] initWithFormat:@"%@ %@ |", headerRow, headerColumnContent];
}
NSLog(@"%@", headerRow);
sqlite3_finalize(statement_showHeader);
// ---------------- show header end ---------------------
puede utilizar la instrucción "Me gusta" si está buscando alguna columna en particular
ex:
SELECT * FROM sqlite_master where sql like(''%LAST%'')
-(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;
}
//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;
}
PRAGMA table_info(table_name);
le dará una lista de todos los nombres de columna.
function getDetails(){
var data = [];
dBase.executeSql("PRAGMA table_info(''table_name'') ", [], function(rsp){
if(rsp.rows.length > 0){
for(var i=0; i<rsp.rows.length; i++){
var o = {
name: rsp.rows.item(i).name,
type: rsp.rows.item(i).type
}
data.push(o);
}
}
alert(rsp.rows.item(0).name);
},function(error){
alert(JSON.stringify(error));
});
}