¿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:

 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); } } 

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.

  • Cómo comprobar si ya existe un valor en la base de datos en Android
  • E / SQLiteLog (1893): (14) no puede abrir archivo en la línea 30176 de
  • ¿Cómo implementar una base de datos SQLite en Phonegap?
  • Base de datos SQLite en android y java
  • Usar insertWithOnConflict para actualizar o insertar
  • Android - Almacenamiento de datos confidenciales en la base de datos sqlite
  • Seleccione un valor distinto en android sqlite
  • SQLite - insertar una cadena con nuevas líneas en la base de datos desde el archivo csv
  • ¿Cómo actualizo mi ListView después de los cambios en la base de datos?
  • Cómo utilizar correctamente claves foráneas en Android, utilizando SQLite y OrmLite
  • Cómo puedo limitar el número de filas en la tabla SQLite de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.