2013-02-27 25 views
5

我越來越又像一個錯誤顯示belowe當我嘗試把我的數據庫中的新條目列。我現在搜索幾個小時,但我無法檢測到什麼是錯的。任何輸入都會很棒!安卓:表沒有名爲「變量名」 MySQL數據庫錯誤

這裏是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) 

數據庫文件

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


} 

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

這就是我如何添加在數據庫中的新條目。

 // # 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

你錯過了你的CREATE_DAY_TABLE字符串一些逗號。沒有他們,你就沒有一個名爲「brutto」的專欄。乍一看,它看起來像你需要他們在小時和UB(至少)。 – 2013-02-27 22:47:34

+0

另外,你可以通過shell連接到數據庫,並且可能會有所幫助(在那裏轉儲表結構,或導出它並使用像SQLite Manager這樣的工具)。 – 2013-02-27 22:51:15

+0

哦,修正了那些。更新的問題。沒有改變任何東西,但我認爲它修復了一個可能的錯誤編號2. :) – chriskvik 2013-02-27 22:54:02

回答

42

所以basicly我找到了解決辦法。我仍然對它有多愚蠢感到困惑。並明確數據庫工作我超敏感的材料!我的問題是我忘記了最後一個「INTEGER」值中的空格。所以,而不是" INTEGER"我寫了"INTEGER",這給了我一排"bruttoINTEGER",而不是「brutto」。所以白色空間是錯誤的。我重寫了createTable函數:

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

哦,你剛剛救了我一天的人XD – 2013-09-17 15:46:21

+1

最後一列聲明後出現了一個逗號(歡迎複製粘貼錯誤)-_- – Warpzit 2014-03-24 11:30:35

+0

謝謝先生..你真的讓我感到震驚,我是多麼愚蠢,只是爲了一個小小的空間,我浪費了一個小時。 – 2016-03-31 17:35:16

0

我不確定,但也許你忘了 「」 在之前 「UB」 和 「brutto」 領域

字符串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

如果您「不確定」,請不要發佈答案 - 特別是如果您所做的只是複製評論。 – 323go 2013-02-27 22:52:36

+0

感謝您的建議。但不幸的是它沒有改變任何東西。它看起來像是將變量傳遞給列。或者創建列字段KEY_UB。 – chriskvik 2013-02-27 22:57:56

+0

是的,抱歉是我的錯,不是我的錯,不是我的錯,我添加',' – Flip120 2013-02-27 22:58:02

1

我同意上面的iNzzane。這個問題主要是由語法造成的。例如,以前我的代碼是正確的。這就是:

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; 

更改版本,它工作得很好,我

+0

非常感謝。 – Devon 2015-11-02 06:41:49

+1

1>從您的設備取下靜電並重新運行。 或 2>更改「DatabaseHandler」類中的版本 – Devon 2015-11-02 06:42:16