Android: la tabla no tiene una columna llamada “nombre de la variable” Error de la base de datos MySql

Me aparece un error como el que se muestra a continuación cuando trato de poner una nueva entrada en mi base de datos. Lo busco durante horas, pero no puedo detectar qué está mal. ¡Cualquier entrada sería excelente!

Aquí está el error de LogCat .

02-27 23:02:51.451: E/SQLiteLog(6777): (1) table dager has no column named brutto 02-27 23:02:51.451: E/SQLiteDatabase(6777): Error inserting brutto=0 date=21.03.2013 hours=4 02-27 23:02:51.451: E/SQLiteDatabase(6777): android.database.sqlite.SQLiteException: table dager has no column named brutto (code 1): , while compiling: INSERT INTO dager(brutto,date,hours) VALUES (?,?,?) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at com.adev.timelonn.DatabaseHandler.addDay(DatabaseHandler.java:79) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at com.adev.timelonn.AddHours.onClick(AddHours.java:99) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.view.View.performClick(View.java:4084) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.view.View$PerformClick.run(View.java:16966) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.os.Handler.handleCallback(Handler.java:615) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.os.Handler.dispatchMessage(Handler.java:92) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.os.Looper.loop(Looper.java:137) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.app.ActivityThread.main(ActivityThread.java:4931) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at java.lang.reflect.Method.invokeNative(Native Method) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at java.lang.reflect.Method.invoke(Method.java:511) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 02-27 23:02:51.451: E/SQLiteDatabase(6777): at dalvik.system.NativeStart.main(Native Method) 

Mi archivo de base de datos

  public class DatabaseHandler extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; // Database Name private static final String DATABASE_NAME = "timeliste"; // Contacts table name private static final String TABLE_DAYS = "dager"; // Contacts Table Columns names private static final String KEY_ID = "id"; private static final String KEY_DATE = "date"; private static final String KEY_HOURS = "hours"; private static final String KEY_UB = "ub"; private static final String KEY_BRUTTO = "brutto"; public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } // Creating Tables @Override public void onCreate(SQLiteDatabase db) String CREATE_DAY_TABLE = "CREATE TABLE " + TABLE_DAYS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT," + KEY_HOURS + " INTEGER, " + KEY_UB + " INTEGER," + KEY_BRUTTO + "INTEGER," + ")"; db.execSQL(CREATE_DAY_TABLE); } // Upgrading database @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Drop older table if existed db.execSQL("DROP TABLE IF EXISTS " + TABLE_DAYS); // Create tables again onCreate(db); } /** * All CRUD(Create, Read, Update, Delete) Operations */ // Adding new contact void addDay(AddNewDay newday) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_DATE, newday.getDate()); // GetDate values.put(KEY_BRUTTO, newday.getBrutto()); // GetBruttoLønn values.put(KEY_HOURS, newday.getHours()); // GetHours values.put(KEY_UB, newday.getUb()); // GetUBTillegg // Inserting Row db.insert(TABLE_DAYS, null, values); db.close(); // Closing database connection } // Get single day AddNewDay getContact(int id) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_DAYS, new String[] { KEY_ID, KEY_DATE, KEY_HOURS, KEY_BRUTTO, KEY_UB }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null); if (cursor != null) cursor.moveToFirst(); AddNewDay newday = new AddNewDay(Integer.parseInt(cursor.getString(0)), cursor.getString(1), Integer.parseInt(cursor.getString(2)), Integer.parseInt(cursor.getString(3)),Integer.parseInt(cursor.getString(4))); // return contact return newday; } // Getting All Contacts public List getAllContacts() { List contactList = new ArrayList(); // Select All Query String selectQuery = "SELECT * FROM " + TABLE_DAYS; SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { do { AddNewDay days = new AddNewDay(); days.setID(Integer.parseInt(cursor.getString(0))); days.setDate(cursor.getString(1)); days.setHours(Integer.parseInt(cursor.getString(2))); days.setUb(Integer.parseInt(cursor.getString(3))); days.setBrutto(Integer.parseInt(cursor.getString(4))); // Adding contact to list contactList.add(days); } while (cursor.moveToNext()); } // return contact list return contactList; } // Updating single contact public int updateDay(AddNewDay newday) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_ID, newday.getID()); values.put(KEY_DATE, newday.getDate()); values.put(KEY_HOURS, newday.getHours()); values.put(KEY_UB, newday.getUb()); values.put(KEY_BRUTTO, newday.getUb()); // updating row return db.update(TABLE_DAYS, values, KEY_ID + " = ?", new String[] { String.valueOf(newday.getID()) }); } // Deleting single contact public void deleteDay(AddNewDay newday) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_DAYS, KEY_ID + " = ?", new String[] { String.valueOf(newday.getID()) }); db.close(); } // Getting contacts Count public int getContactsCount() { String countQuery = "SELECT * FROM " + TABLE_DAYS; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(countQuery, null); cursor.close(); // return count return cursor.getCount(); } } 

Y luego mi archivo AddNewDay .

  public class AddNewDay { //private variables int _id; String _date; int _hours; int _ubtillegg; int _brutto; // Empty constructor public AddNewDay(){ } // constructor public AddNewDay(int id, String date, int hours, int ubtillegg, int brutto){ this._id = id; this._date = date; this._hours = hours; this._ubtillegg = ubtillegg; this._brutto = brutto; } // constructor public AddNewDay(String date, int hours, int brutto){ this._date = date; this._hours = hours; this._brutto = brutto; } // getting ID public int getID(){ return this._id; } // setting id public void setID(int id){ this._id = id; } // getting date public String getDate(){ return this._date; } // setting date public void setDate(String date){ this._date = date; } // getting hours public int getHours(){ return this._hours; } // setting hours public void setHours(int hours){ this._hours = hours; } // getting ubtillegg public int getUb(){ return this._ubtillegg; } // setting ubtillegg public void setUb(int ub){ this._ubtillegg = ub; } // getting brutto public int getBrutto(){ return this._brutto; } // setting brutto public void setBrutto(int brutto){ this._brutto = brutto; } public String toString() { return _date + " jobbet du " + _hours + " timer."; } } 

Y así es como agrego una nueva entrada en la base de datos.

  // # Makes a new object of newday. AddNewDay newday = new AddNewDay (); newday._date = "21.03.2013"; newday._id = 1; newday._hours = 4; newday._ubtillegg = 1500; // # Open databse connection and writes new day. DatabaseHandler connect = new DatabaseHandler (this); connect.addDay(newday); // # Updates the dblist with entries. GlobalVariables.dblist = connect.getAllContacts(); 

Entonces, básicamente, encontré la solución. Todavía estoy confundido sobre lo estúpido que era. ¡Y claramente el trabajo de la base de datos es un material súper sensible! Mi problema es que olvidé un espacio en blanco en el último valor “INTEGER”. Entonces en vez de " INTEGER" escribí "INTEGER" , y eso me dio una fila llamada "bruttoINTEGER" lugar de “brutto”. Entonces un espacio en blanco fue el error. Reescribí la función createTable a esto:

  public void onCreate(SQLiteDatabase db) { String CREATE_DAY_TABLE = "CREATE TABLE " + TABLE_DAYS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT," + KEY_HOURS + " INTEGER, " + KEY_UB + " INTEGER," + KEY_BRUTTO + " INTEGER" + ");"; db.execSQL(CREATE_DAY_TABLE); } 
 private static final int VERSION = 4; 

Cambiar la versión funcionó bien para mí

Estoy de acuerdo con iNzzane arriba. este problema es causado principalmente por la syntax. por ejemplo, anteriormente mi código era correcto. aquí está:

 String CREATE_PRODUCTS_TABLE = "CREATE TABLE " + TABLE_PRODUCTS + "(" + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_MESSAGEADDRESS + " TEXT," + COLUMN_MESSAGEBODY + " TEXT " + ")"; the above code was running correct but i added another column and it started causing the mentioned error. below is the erroneous code: String CREATE_PRODUCTS_TABLE = "CREATE TABLE " + TABLE_PRODUCTS + "(" + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_MESSAGEADDRESS + " TEXT," + COLUMN_MESSAGEBODY + " TEXT" + COLUMN_MESSAGETIME + " LONG" + ")"; as you can see, when i added the new column i forgot to include a comma after type TEXT. this means that when this code is executed, there will be syntax error as the compiler will read the last part as: COLUMN_MESSAGEBODY TEXTCOLUMN_MESSAGETIME LONG as opposed to: COLUMN_MESSAGEBODY TEXT, COLUMN_MESSAGETIME LONG solution: ensure that your syntax is correct and you heed to spaces and commas. 

No estoy seguro, pero tal vez se olvidó de los campos “,” en la consulta antes de “ub” y “brutto”

Cadena CREATE_DAY_TABLE = “CREATE TABLE” + TABLE_DAYS + “(” + KEY_ID + “INTEGER PRIMARY KEY,” + KEY_DATE + “TEXT,” + KEY_HOURS + “INTEGER PRIMARY KEY,” + KEY_UB + “INTEGER PRIMARY KEY,” + KEY_BRUTTO + “INTEGER PRIMARY KEY” + “)”; db.execSQL (CREATE_DAY_TABLE);