Excepción "tabla … no tiene columna nombrada …"

Estoy enfrentando un error realmente extraño, al intentar insertar en una tabla llamada "my_card".

Estas son algunas de las constantes que definí en una interfaz separada:

//tables name public static final String TABLE_MY_CARD= "my_card" ; public static final String TABLE_MY_CONTACTS = "my_contacts" ; // Columns public static final String NAME = "name" ; public static final String PHONE = "phone" ; public static final String EMAIL = "email"; public static final String FACEBOOK = "facebook"; public static final String WEBSITE = "web"; public static final String MAJOR = "major"; public static final String ULINK = "ulink"; 

Después de eso tengo una clase que extiende SQLiteOpenHelper, con 2 funciones. El más importante es el primero que crea la tabla dada por un parámetro.

 public class MySQLite_methods extends SQLiteOpenHelper implements Tables { private static final String DATABASE_NAME = "my_database.db" ; private static final int DATABASE_VERSION = 1; private String TABLE_NAME; /** Create a helper object for the Events database */ public MySQLite_methods (Context ctx, String table_name) { super(ctx, DATABASE_NAME, null, DATABASE_VERSION); this.TABLE_NAME = table_name; } @Override public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME + " TEXT NOT NULL," + PHONE + " TEXT NOT NULL,"+ EMAIL + " TEXT NOT NULL,"+ FACEBOOK + " TEXT,"+ WEBSITE + " TEXT,"+ MAJOR + " TEXT NOT NULL,"+ ULINK + " TEXT NOT NULL" + ");" ; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } } 

Y finalmente, en mi actividad, después de presionar un botón para guardar, se creará una instancia de la clase y los valores de algunos EditText-s tendrán que insertarse en la base de datos:

  MySQLite_methods mysql = new MySQLite_methods (context, TABLE_MY_CARD); Log.d("geo", "before getWr...."); // getting the database.. SQLiteDatabase db = mysql.getWritableDatabase(); // creating an object of type ContentValues which represents the record i am gonna add into the DB ContentValues values = new ContentValues(); values.put(NAME, name.getText().toString()); values.put(PHONE, phone.getText().toString()); values.put(EMAIL, email.getText().toString()); values.put(FACEBOOK, facebook.getText().toString()); values.put(WEBSITE, website.getText().toString()); values.put(MAJOR, major.getText().toString()); values.put(ULINK, ulink.getText().toString()); Log.d("geo", "before insert"); // inserting data db.insertOrThrow(TABLE_MY_CARD, null, values); 

En el momento del inserto da esta excepción:

"android.database.sqlite.SQLiteException: table mi_card no tiene columna llamada web …."

Comprobé una y otra vez por errores tipográficos, pero ninguno … Así que no sé qué hacer ahora … ¿Alguna idea? Gracias

Su crear SQL comienza con CREATE TABLE IF NOT EXISTS . Así que mi idea es que agregó columna web, mientras que el dispositivo ya ha tenido esa tabla. Si este es el caso, basta con reinstalar la aplicación – se eliminará la base de datos, por lo que puede estar seguro de que la tabla se creará con esa columna.

Para mi caso, me olvido de insertar un espacio vacío para el tipo, es como el siguiente código erróneo:

 String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME + " TEXT NOT NULL," + PHONE + " TEXT NOT NULL,"+ EMAIL + " TEXT NOT NULL,"+ FACEBOOK + "TEXT,"+ WEBSITE + " TEXT,"+ MAJOR + " TEXT NOT NULL,"+ ULINK + " TEXT NOT NULL" + ");" ; db.execSQL(sql); 

la columna de FACEBOOK se producirá una excepción encajonada por la falta de un espacio vacío. Por lo tanto, en mi caso, cuando ocurre esta excepción sqlite, también puede comprobar los formatos de la tabla de base de datos.

  • WebView hace que SQLiteDiskIOException
  • Cómo ver la base de datos de aplicación de Android que se ejecuta en mi teléfono
  • ¿Cuál es el modo de subprocesamiento predeterminado de SQLite en Android?
  • Cómo obtener una fila específica donde se actualiza el valor en android
  • Actualizar una columna como suma de otras dos columnas
  • Problema de orden de consultas SQLite de Android
  • android.database.sqlite.SQLiteException: near "...": error de sintaxis (código 1)
  • Android: ORDER BY en la consulta
  • Android.database.sqlite.SQLiteDatabase.rawQuery () no está actualizando una columna DATETIME con una función SQLite datetime ()
  • Obtención del siguiente valor AUTO_INCREMENT de una base de datos SQLite
  • La tabla de actualización utilizando el método rawQuery () no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.