Android SQLite issue – table … no tiene una columna llamada

Estoy recibiendo este error – 07-03 12:29:18.643: E/SQLiteLog(5181): (1) table accounts has no column named otherNotes

Este es mi código:

 private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "accountsManager"; private static final String TABLE_ACCOUNTS = "accounts"; private static final String KEY_ID = "id"; private static final String KEY_TITLE = "title"; private static final String KEY_USERID = "userId"; private static final String KEY_PASSWORD = "password"; private static final String KEY_LOGINURL = "loginUrl"; private static final String KEY_OTHERNOTES = "otherNotes"; public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } public void onCreate(SQLiteDatabase db) { String CREATE_ACCOUNTS_TABLE = "CREATE TABLE " + TABLE_ACCOUNTS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_TITLE + " TEXT," + KEY_USERID + " TEXT," + KEY_PASSWORD + " TEXT," + KEY_LOGINURL + " TEXT," + KEY_OTHERNOTES + " TEXT" + ");"; db.execSQL(CREATE_ACCOUNTS_TABLE); } public void addAccount(AccountDetails account) { SQLiteDatabase db = this.getWritableDatabase(); System.out.println("Hello!"); ContentValues values = new ContentValues(); values.put(KEY_TITLE, account.getTitle()); // Account Title values.put(KEY_USERID, account.getUserId()); // account userid values.put(KEY_PASSWORD, account.getPassword()); // account password values.put(KEY_LOGINURL, account.getLoginUrl()); // account loginurl values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes Log.v("title", KEY_TITLE); // Inserting Row db.insert(TABLE_ACCOUNTS, null, values); db.close(); // Closing database connection } 

También, cuando quito la siguiente declaración:

 values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes 

Entonces consigo el mismo problema con la contraseña … etc. Es decir, (1) cuentas de tabla no tiene columna nombre contraseña

¡¡Por favor ayuda!!

Parece que agregó algunas columnas más adelante en la base de datos. Estoy de acuerdo con Ken Wolf y deberías considerar desinstalar y volver a instalar tu aplicación. Un mejor enfoque es, soltar y volver a crear todas las tablas en el método onUpdate , y aumentar la versión db cada vez que cambie el esquema.

Bueno, si usted es confindent acerca de la sintaxis para la creación de tabla, que puede suceder cuando se agrega nueva columna en su misma tabla, por eso …

1) Unistall desde su dispositivo y ejecútelo de nuevo.

O

2) Configuración -> aplicación -> ClearData

O

3) Cambiar DATABASE_NAME en su clase "DatabaseHandler" (me enfrenté al mismo problema, pero suuceed cambiando DATABASE_NAME.)

O

4) Cambiar DATABASE_VERSION en su clase "DatabaseHandler" (Si ha agregado nueva columna de la que se actualizará autimatically)

 public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } 

El código SQL se ve bien. Creo que olvidó llamar a open() en el objeto de base de datos que creó.

Añada estos métodos a usted clase de SQL:

  private DbHelper ourHelper; private final Context ourContext; private SQLiteDatabase ourDatabase; public DataBaseMain open() throws SQLException{ //open the database to make her writeable, must be called before writing to database ourHelper = new DbHelper(ourContext); ourDatabase = ourHelper.getWritableDatabase(); return this; } public void close(){ //closing the database for writing, avoids error. ourHelper.close(); } 

Y utilice cuando quiera llamar DB.

Como dice Benil en un comentario anterior , cambie el número de la versión de la base de datos y ejecute el código de nuevo.

Intente "Borrar datos" de su aplicación desde Configuración. Para mí este problema estaba ocurriendo porque yo era datos de almacenamiento en tarjeta SD y más tarde he añadido algunas columnas. Tan si usted está ahorrando en tarjeta del SD suprime los datos anteriores.

Aquí es tu consulta … TRY esto.

  String CREATE_ACCOUNTS_TABLE = "CREATE TABLE "+TABLE_ACCOUNTS+"(KEY_ID INTEGER PRIMARY KEY,KEY_TITLE TEXT,KEY_USERID TEXT,KEY_PASSWORD TEXT,KEY_LOGINURL TEXT,KEY_OTHERNOTES TEXT);"; 

Es posible que si cometiste un error en la consulta de creación y luego arreglarlo,

Así que en el sistema de archivos que tiene un db, pero este db posiblemente no tiene tal columna.

Solución: busque en el emulador un archivo db: data / data / com.somecompany.yourapp / databases / db y elimínelo y vuelva a intentarlo.

También es posible abrir este archivo en algún explorador sql y comprobar si hay esa columna.

Sólo puede especificar la versión como esta:

 private static final int VERSION = 4; 
  • Almacenamiento de números de coma flotante en la base de datos android
  • SQLCipher para Android getReadableDatabase () Sobrehéroe
  • Androide sqlite comprobar si se ha insertado un nuevo valor
  • Búsqueda SQLite FTS4 con caracteres especiales
  • ¿Cómo utilizar SQLite DB de AsyncTask?
  • Cómo convertir los registros de base de datos en archivo csv en android?
  • Cómo ver la base de datos de aplicación de Android que se ejecuta en mi teléfono
  • Arrastrar y soltar RecyclerView que se rellena desde SQLiteDatabase
  • Custom SimpleCursorAdapter, consulta de base de datos y NullPointerException
  • Android java.lang.IllegalStateException: No se pudo leer la fila 0, col 0 de CursorWindow
  • Debería llamar a .close () en SQLiteDatabase y SQLiteOpenHelper
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.