¿Cómo elimino una entrada de fila de tabla sqlite por cadena?
Soy un noob de Android, y estoy tratando de averiguar cómo eliminar una fila de la tabla en sqlite con una cadena en lugar de un largo para el número de fila. No tengo ningún problema añadiendo datos a mi tabla, pero cuando intento eliminar el mismo valor obtengo una excepción de SQL que dice SQLiteException: no such column 'my_entry': while compiling: DELETE FROM dbTABLE WHERE db_NAME = my_entry
Cualquier insight es muy apreciada . Aquí está mi código:
Código para agregar la entrada de fila:
- Android: SQLite usando base de datos incorrecta
- Almacenamiento de datos de Android - Archivo vs SQLite
- Base de datos Sqlite que actualiza una fila Android
- Preferencias compartidas vs base de datos
- Android: Cómo cargar imagen dinámicamente desde el servidor por su nombre de SQlite
public long createEntry(String coin, String quantity, String value) { ContentValues cv = new ContentValues(); cv.put(KEY_NAME, coin); cv.put(KEY_QUANTITY, quantity); cv.put(KEY_VALUE, value); return ourDatabase.insert(DATABASE_TABLE, null, cv); }
Código para eliminar la entrada de fila:
public void deleteEntry(String coin) throws SQLException{ ourDatabase.delete(DATABASE_TABLE, KEY_NAME + "=" + coin, null); }
Código para toda la base de datos:
public static final String KEY_ROWID = "_id"; public static final String KEY_NAME = "cointype_name"; public static final String KEY_QUANTITY = "cointype_quantity"; public static final String KEY_VALUE = "cointype_value"; private static final String DATABASE_NAME = "PortfolioDatabase"; private static final String DATABASE_TABLE = "cointypeTable"; private static final int DATABASE_VERSION = 1; private DbHelper ourHelper; private final Context ourContext; private SQLiteDatabase ourDatabase; private static class DbHelper extends SQLiteOpenHelper { public DbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME + " TEXT NOT NULL, " + KEY_QUANTITY + " TEXT NOT NULL, " + KEY_VALUE + " TEXT NOT NULL);" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); onCreate(db); } } public PortfolioDatabase(Context c){ ourContext = c; } public PortfolioDatabase open() throws SQLException{ ourHelper = new DbHelper(ourContext); ourDatabase = ourHelper.getWritableDatabase(); return this; } public void close(){ ourHelper.close(); } public long createEntry(String coin, String quantity, String value) { ContentValues cv = new ContentValues(); cv.put(KEY_NAME, coin); cv.put(KEY_QUANTITY, quantity); cv.put(KEY_VALUE, value); return ourDatabase.insert(DATABASE_TABLE, null, cv); } public String getData() { String[] columns = new String[]{ KEY_ROWID, KEY_NAME, KEY_QUANTITY, KEY_VALUE }; Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); String result = ""; int iRow = c.getColumnIndex(KEY_ROWID); int iName = c.getColumnIndex(KEY_NAME); int iQuantity = c.getColumnIndex(KEY_QUANTITY); int iValue = c.getColumnIndex(KEY_VALUE); for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ result = result + c.getString(iRow) + " " + c.getString(iName) + " " + c.getString(iQuantity) + " " + c.getString(iValue) + "\n"; } return result; } public String getName(long l) throws SQLException{ String[] columns = new String[]{ KEY_ROWID, KEY_NAME, KEY_QUANTITY, KEY_VALUE}; Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + l, null, null, null, null); if (c != null){ c.moveToFirst(); String name = c.getString(1); return name; } return null; } public String getHotness(long l) throws SQLException{ String[] columns = new String[]{ KEY_ROWID, KEY_NAME, KEY_QUANTITY, KEY_VALUE }; Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + l, null, null, null, null); if (c != null){ c.moveToFirst(); String hotness = c.getString(2); return hotness; } return null; } public void updateEntry(String mCoin, String mQuantity, String mValue) throws SQLException { ContentValues cvUpdate = new ContentValues(); cvUpdate.put(KEY_NAME, mCoin); cvUpdate.put(KEY_QUANTITY, mQuantity); cvUpdate.put(KEY_VALUE, mValue); ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_NAME + "=" + mCoin, null); } public void deleteEntry(String coin) throws SQLException { ourDatabase.delete(DATABASE_TABLE, KEY_NAME + "=" + coin, null); } }
- Guardar ArrayList en la base de datos SQLite en Android
- Qué son los tipos de datos en SQLite que soportan android
- Cómo almacenar la imagen en la base de datos SQLite
- ¿El cursor SQLite de Android carga todos los registros en la memoria a la vez?
- Sqlite Seleccione Query con rawQuery en Android
- ¿Un cursor SQLite vacío devolverá true para isBeforeFirst, isAfterLast, ambos o ninguno?
- Java.lang.illegalstateexception no abre la base de datos android
- SQLite de SQL INSERT o IGNORE no funciona
No debes usar la cadena directamente y si lo haces necesitas envolverla en '
puesto que SQLite lo considerará un nombre de columna de lo contrario.
La manera más segura de hacerlo es
public void deleteEntry(String coin) throws SQLException{ String[] whereArgs = new String[] { coin }; ourDatabase.delete(DATABASE_TABLE, KEYNAME + "=?", whereArgs); }
La forma insegura es
ourDatabase.delete(DATABASE_TABLE, KEYNAME + "='" + coin + "'", null);
y que fallará si la coin
contiene un '
por lo que no lo utilizan.
- ¿Por qué debo importar la clase R cuando uso recursos en un paquete no root?
- Actualización de una actividad desde un AsyncTask