Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
254 views
in Technique[技术] by (71.8m points)

java - Android : Table has no column named "variable name" MySql Database error

I'm getting and error like the one showed belowe when I try to put a new entry in my database. I search trough it for hours now, but I'm not able to detect whats wrong. Any input would be superb!

Here is the error from 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)

My database file.

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


}

And then my AddNewDay file.

  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.";
             }  
            }

And this is how I add a new entry in the 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();
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

So basicly I found the solution. I'm still confused about how stupid it was. And clearly database work i super-sensitive material! My problem was I forgot a white-space in the last "INTEGER" value. So instead of " INTEGER" i wrote "INTEGER", and that gave me a row called "bruttoINTEGER" instead of "brutto". So a white-space was the error. I rewrote the createTable function to this :

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...