Cuestión de SQLite de Android – tabla … no tiene una columna llamada

Recibo 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 } 

Además, cuando elimino la siguiente statement:

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

Entonces tengo el mismo problema con la contraseña … etc. es decir, (1) cuentas de tabla no tienen una columna llamada 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ía considerar desinstalar y volver a instalar su aplicación. Un mejor enfoque es descartar y volver a crear todas las tablas en el método onUpdate e incrementar la versión db cada vez que cambie el esquema.

Bueno, si confindes acerca de la syntax para crear una tabla, de lo que puede suceder cuando agregas una nueva columna en tu misma tabla, para eso …

1) Desconecte de su dispositivo y ejecútelo nuevamente.

O

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

O

3) Cambie DATABASE_NAME en su clase “DatabaseHandler” (me enfrenté al mismo problema. Pero lo reduje cambiando DATABASE_NAME).

O

4) Cambie DATABASE_VERSION en su clase “DatabaseHandler” (si ha agregado una nueva columna, se actualizará automáticamente)

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

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

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

agrega estos métodos a tu clase 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 utilízalo cuando quieras llamarte DB.

Intenta “Borrar datos” de tu aplicación desde Configuración. Para mí, este problema se produjo porque yo estaba almacenando datos en la tarjeta SD y luego agregué algunas columnas. Entonces, si está guardando en una tarjeta SD, elimine los datos anteriores.

Aquí es su consulta … 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 si cometió un error en la consulta de creación y luego lo soluciona,

Entonces, en el sistema de archivos tiene un db, pero este db posiblemente no tenga dicha columna.

Solución: en el emulador, busque un archivo db: data / data / com.somecompany.yourapp / databases / db y quítelo, luego intente de nuevo.

También es posible abrir este archivo en algún explorador SQL y verificar si existe esa columna.

Puedes simplemente especificar la versión como esta:

 private static final int VERSION = 4; 

Me encontré con el mismo problema, ya que actualicé mi tabla de base de datos en sqlite con nuevas columnas durante la fase de prueba.

Además de las respuestas que ya se dieron anteriormente, lo que encontré realmente útil para actualizar las bases de datos SQLite (por ejemplo, después de los cambios) es ABD Idea , un complemento de AndroidStudio que te permite:

  1. Desinstalar aplicación
  2. Artículo de lista
  3. Matar aplicación
  4. Iniciar la aplicación
  5. Reiniciar aplicación
  6. Borrar datos de la aplicación
  7. Borrar datos de la aplicación y reiniciar

Si está seguro de que sus códigos están en buen estado, intente desinstalar la aplicación y luego vuelva a ejecutarla. Esto resolvió mi problema. Espero que haya ayudado