2013-02-27 10 views
5

Ricevo e errore come quello mostrato di seguito quando provo a inserire una nuova voce nel mio database. Ora lo cerco da ore, ma non sono in grado di rilevare che cosa non va. Qualsiasi input sarebbe superbo!Android: la tabella non ha una colonna denominata "nome variabile" MySql Errore database

Questo è l'errore da 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.<init>(SQLiteProgram.java:58) 
02-27 23:02:51.451: E/SQLiteDatabase(6777):  at android.database.sqlite.SQLiteStatement.<init>(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) 

Il mio file di database .

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<AddNewDay> getAllContacts() { 
    List<AddNewDay> contactList = new ArrayList<AddNewDay>(); 
    // 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(); 
} 


} 

E poi il mio file 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."; 
      } 
      } 

Ed è così che aggiungo una nuova voce nel database.

 // # 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(); 
+3

Ti sei perso alcuni virgole nella stringa CREATE_DAY_TABLE. E, senza di loro, non hai una colonna chiamata "brutto". A prima vista sembra che tu abbia bisogno di loro dopo ore e ub (almeno). –

+0

Inoltre, è possibile connettersi al DB tramite la shell e spostarsi, ciò potrebbe essere utile (eseguire il dump della struttura della tabella o esportarlo e utilizzare uno strumento come SQLite Manager). –

+0

Oh, risolti quelli. Domanda aggiornata Non ho cambiato nulla, ma presumo che sia stato corretto un possibile errore numero 2. :) – chriskvik

risposta

42

Quindi ho trovato la soluzione. Sono ancora confuso su quanto sia stato stupido. E chiaramente il database funziona come materiale super sensibile! Il mio problema era che avevo dimenticato uno spazio bianco nell'ultimo valore "INTEGER". Quindi invece di " INTEGER" ho scritto "INTEGER", e questo mi ha dato una riga chiamata "bruttoINTEGER" invece di "brutto". Quindi uno spazio bianco era l'errore. Ho riscritto la funzione createTable a questo:

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

Ohhh uomo hai appena salvato la mia giornata XD –

+1

Ho avuto una virgola dopo l'ultima dichiarazione di colonna (evviva gli errori di copia incolla) -_- – Warpzit

+0

grazie signore .. mi hai davvero scioccato quanto sono stupido, solo per un solo piccolo spazio ho perso 1 ora. –

0

non sono sicuro, ma forse si è dimenticato il "" nella query prima di "ub" ei campi "brutto"

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

+0

Non pubblicare una risposta se non sei "sicuro", soprattutto se tutto quello che stai facendo è copiare un commento. – 323go

+0

Grazie per il suggerimento. Ma sfortunatamente non ha cambiato nulla. Sembra che abbia qualcosa a che fare con il passaggio di variabili in una colonna. O la creazione del campo colonna KEY_UB. – chriskvik

+0

Sì, mi dispiace è colpa mia, non è la copia, aggiungo ',' – Flip120

1

sono d'accordo con iNzzane sopra. questo problema è causato principalmente dalla sintassi. ad esempio, in precedenza il mio codice era corretto. qui è:

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. 
3
private static final int VERSION = 4; 

cambiare la versione ha funzionato bene per me

+0

grazie mille. – Devon

+1

1> Unistall dal dispositivo ed eseguirlo di nuovo. o 2> Modifica versione nella classe "DatabaseHandler" – Devon

Problemi correlati