tutorial studio portable manager descargar sqlite

portable - sqlite studio



Compruebe si existe una columna en SQLite (14)

Actualicé la función de un amigo ... probado y trabajando ahora

public boolean isFieldExist(String tableName, String fieldName) { boolean isExist = false; SQLiteDatabase db = this.getWritableDatabase(); Cursor res = db.rawQuery("PRAGMA table_info(" + tableName + ")", null); if (res.moveToFirst()) { do { int value = res.getColumnIndex("name"); if(value != -1 && res.getString(value).equals(fieldName)) { isExist = true; } // Add book to books } while (res.moveToNext()); } return isExist; }

Necesito verificar si existe una columna y si no existe, agréguela. Según mi investigación, parece que sqlite no es compatible con las declaraciones de IF y en su lugar se debe usar la declaración de caso.

Aquí está lo que tengo hasta ahora:

SELECT CASE WHEN exists(select * from qaqc.columns where Name = "arg" and Object_ID = Object_ID("QAQC_Tasks")) = 0 THEN ALTER TABLE QAQC_Tasks ADD arg INT DEFAULT(0);

Pero me sale el error: Cerca de "ALTER": error de sintaxis.

¿Algunas ideas?


Actualice la DATABASE_VERSION para que se llame a la función onUpgrade, si la columna ya existe, entonces no sucederá nada, de lo contrario agregará una nueva columna.

private static class OpenHelper extends SQLiteOpenHelper { OpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (!isColumnExists(db, "YourTableName", "YourColumnName")) { try { String sql = "ALTER TABLE " + "YourTableName" + " ADD COLUMN " + "YourColumnName" + "TEXT"; db.execSQL(sql); } catch (Exception localException) { db.close(); } } }

}

public static boolean isColumnExists(SQLiteDatabase sqliteDatabase, String tableName, String columnToFind) { Cursor cursor = null; try { cursor = sqliteDatabase.rawQuery( "PRAGMA table_info(" + tableName + ")", null ); int nameColumnIndex = cursor.getColumnIndexOrThrow("name"); while (cursor.moveToNext()) { String name = cursor.getString(nameColumnIndex); if (name.equals(columnToFind)) { return true; } } return false; } finally { if (cursor != null) { cursor.close(); } } }


Algunos de estos ejemplos no funcionaron para mí. Estoy tratando de comprobar si mi tabla ya contiene una columna o no.

Estoy usando este fragmento de código:

public boolean tableHasColumn(SQLiteDatabase db, String tableName, String columnName) { boolean isExist = false; Cursor cursor = db.rawQuery("PRAGMA table_info("+tableName+")",null); int cursorCount = cursor.getCount(); for (int i = 1; i < cursorCount; i++ ) { cursor.moveToPosition(i); String storedSqlColumnName = cursor.getString(cursor.getColumnIndex("name")); if (columnName.equals(storedSqlColumnName)) { isExist = true; } } return isExist; }

Los ejemplos anteriores están consultando la tabla pragma, que es una tabla de metadatos y no los datos reales, cada columna indica los nombres, el tipo y otras cosas sobre las columnas de la tabla. Así que los nombres de columna reales están dentro de las filas.

Espero que esto ayude a alguien más.


Aunque esta es una pregunta antigua, encontré que en PRAGMA funciona una solución más simple:

SELECT COUNT(*) AS CNTREC FROM pragma_table_info(''tablename'') WHERE name=''column_name''

Si el resultado es más que cero, entonces existe la columna. Consulta simple y de una línea.

El truco es usar

pragma_table_info(''tablename'')

en lugar de

PRAGMA table_info(tablename)

Edición : Tenga en cuenta que, como se informó en las funciones de PRAGMA :

Esta característica es experimental y está sujeta a cambios. Más documentación estará disponible si y cuando las funciones con valores de tabla para la función PRAGMAs se admitan oficialmente.

Las funciones con valores de tabla para la característica PRAGMA se agregaron en la versión 3.16.0 de SQLite (2017-01-02). Las versiones anteriores de SQLite no pueden usar esta característica.


He aplicado esta solución:

public boolean isFieldExist(SQLiteDatabase db, String tableName, String fieldName) { boolean isExist = false; Cursor res = null; try { res = db.rawQuery("Select * from "+ tableName +" limit 1", null); int colIndex = res.getColumnIndex(fieldName); if (colIndex!=-1){ isExist = true; } } catch (Exception e) { } finally { try { if (res !=null){ res.close(); } } catch (Exception e1) {} } return isExist; }

Es una variante de código de Pankaj Jangid.


La answer Pankaj Jangid es cercana pero no del todo correcta. Aquí está con correcciones:

public boolean isColumnExists(SQLiteDatabase sqliteDatabase, String tableName, String columnToFind) { Cursor cursor = null; try { cursor = sqLiteDatabase.rawQuery( "PRAGMA table_info(" + tableName + ")", null ); int nameColumnIndex = cursor.getColumnIndexOrThrow("name"); while (cursor.moveToNext()) { String name = cursor.getString(nameColumnIndex); if (name.equals(columnToFind)) { return true; } } return false; } finally { if (cursor != null) { cursor.close(); } } }


Lo siento mucho por publicarlo tarde. Publicar en la intención de puede ser útil en el caso de alguien.

Intenté recuperar la columna de la base de datos. Si devuelve una fila, contiene esa columna de lo contrario no ...

-(BOOL)columnExists { BOOL columnExists = NO; //Retrieve the values of database const char *dbpath = [[self DatabasePath] UTF8String]; if (sqlite3_open(dbpath, &database) == SQLITE_OK){ NSString *querySQL = [NSString stringWithFormat:@"SELECT lol_10 FROM EmployeeInfo"]; const char *query_stmt = [querySQL UTF8String]; int rc = sqlite3_prepare_v2(database ,query_stmt , -1, &statement, NULL); if (rc == SQLITE_OK){ while (sqlite3_step(statement) == SQLITE_ROW){ //Column exists columnExists = YES; break; } sqlite3_finalize(statement); }else{ //Something went wrong. } sqlite3_close(database); } return columnExists; }


No especificó un idioma, por lo que, asumiendo que no es SQL simple, puede verificar errores en la consulta de columnas:

SELECT col FROM table;

si recibe un error, entonces sabe que la columna no está allí (asumiendo que sabe que la tabla existe, de todos modos tiene el "SI NO EXISTE" para esto), de lo contrario la columna existe y luego puede modificar la tabla en consecuencia.


No puedes usar ALTER TABLE with estuche .

Está buscando obtener los nombres de columna para una tabla :: -

PRAGMA table_info(table-name);

Mira este tutorial en PRAGMA

Este pragma devuelve una fila para cada columna en la tabla nombrada. Las columnas en el conjunto de resultados incluyen el nombre de la columna, el tipo de datos, si la columna puede ser NULL o no, y el valor predeterminado para la columna. La columna "pk" en el conjunto de resultados es cero para las columnas que no forman parte de la clave principal, y es el índice de la columna en la clave principal para las columnas que forman parte de la clave principal.


Para obtener nombres de columna para una tabla:

PRAGMA table_info (tableName);

Para obtener columnas indexadas:

PRAGMA index_info (indexName);



Una extraña manera de verificar la columna existente

public static bool SqliteColumnExists(this SQLiteCommand cmd, string table, string column) { lock (cmd.Connection) { // make sure table exists cmd.CommandText = string.Format("SELECT sql FROM sqlite_master WHERE type = ''table'' AND name = ''{0}''", table); var reader = cmd.ExecuteReader(); if (reader.Read()) { //does column exists? bool hascol = reader.GetString(0).Contains(String.Format("/"{0}/"", column)); reader.Close(); return hascol; } reader.Close(); return false; } }


public static bool columExsist(string table, string column) { string dbPath = Path.Combine(Util.ApplicationDirectory, "LocalStorage.db"); connection = new SqliteConnection("Data Source=" + dbPath); connection.Open(); DataTable ColsTable = connection.GetSchema("Columns"); connection.Close(); var data = ColsTable.Select(string.Format("COLUMN_NAME=''{1}'' AND TABLE_NAME=''{0}1''", table, column)); return data.Length == 1; }


// This method will check if column exists in your table public boolean isFieldExist(String tableName, String fieldName) { boolean isExist = false; SQLiteDatabase db = this.getWritableDatabase(); Cursor res = db.rawQuery("PRAGMA table_info("+tableName+")",null); res.moveToFirst(); do { String currentColumn = res.getString(1); if (currentColumn.equals(fieldName)) { isExist = true; } } while (res.moveToNext()); return isExist; }