2012-02-10 45 views
1

正在做一個小項目來存儲員工的詳細信息並進行修改。我成功了,直到我添加名爲EmpID的員工ID列。並且數據沒有在表中插入顯示錯誤:數據庫表員工沒有名爲EmpID的列?

android.database.sqlite.SQLiteException: table Employees has no column named EmpID: 
while compiling: INSERT INTO Employees(Mobile, Age, EmpID, Dept, EmployeeName) VALUES(?, ?, ?, ?, ?); 

我不能夠得到的問題是什麼。這裏是一個用於創建數據庫表我databasehelper代碼..任何人都可以請幫我..

public class DatabaseHelper extends SQLiteOpenHelper { 

    static final String dbName="demoDB"; 
    static final String employeeTable="Employees"; 
    static final String colID="EmployeeID"; 
    static final String colName="EmployeeName"; 
    static final String colempId="EmpID"; 
    static final String colAge="Age"; 
    static final String colMobile="Mobile"; 
    static final String colDept="Dept"; 
    static final String deptTable="Dept"; 
    static final String colDeptID="DeptID"; 
    static final String colDeptName="DeptName"; 
    static final String viewEmps="ViewEmps"; 

     public DatabaseHelper(Context context) { 
      super(context, dbName, null,33);       
      // TODO Auto-generated constructor stub 
     } 

    @Override 
     public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub  
     db.execSQL("CREATE TABLE "+deptTable+" ("+colDeptID+ " INTEGER PRIMARY KEY , "+ 
      colDeptName+ " TEXT)");  
     db.execSQL("CREATE TABLE "+employeeTable+" ("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+colName+" TEXT,"+colempId+" TEXT, "+ 
     colAge+" Integer,"+colMobile+" TEXT, "+colDept+" INTEGER NOT NULL ,FOREIGN KEY ("+colDept+") REFERENCES "+deptTable+" ("+colDeptID+"));");  
     db.execSQL("CREATE TRIGGER fk_empdept_deptid " + 
      " BEFORE INSERT "+ 
      " ON "+employeeTable+ 

      " FOR EACH ROW BEGIN"+ 
      " SELECT CASE WHEN ((SELECT "+colDeptID+" FROM "+deptTable+" WHERE "+colDeptID+"=new."+colDept+") IS NULL)"+ 
      " THEN RAISE (ABORT,'Foreign Key Violation') END;"+ 
      " END;"); 

    db.execSQL("CREATE VIEW "+viewEmps+ 
      " AS SELECT "+employeeTable+"."+colID+" AS _id,"+ 
      " "+employeeTable+"."+colName+","+ 
      " "+employeeTable+"."+colempId+","+ 
      " "+employeeTable+"."+colAge+","+ 
      " "+employeeTable+"."+colMobile+","+ 
      " "+deptTable+"."+colDeptName+""+ 
      " FROM "+employeeTable+" JOIN "+deptTable+ 
      " ON "+employeeTable+"."+colDept+" ="+deptTable+"."+colDeptID 
      ); 
    //Inserts pre-defined departments 
    InsertDepts(db); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub  
    db.execSQL("DROP TABLE IF EXISTS "+employeeTable); 
    db.execSQL("DROP TABLE IF EXISTS "+deptTable);  
    db.execSQL("DROP TRIGGER IF EXISTS dept_id_trigger"); 
    db.execSQL("DROP TRIGGER IF EXISTS dept_id_trigger22"); 
    db.execSQL("DROP TRIGGER IF EXISTS fk_empdept_deptid"); 
    db.execSQL("DROP VIEW IF EXISTS "+viewEmps); 
    onCreate(db); 
} 

void AddEmployee(Employee emp) 
{   
    SQLiteDatabase db= this.getWritableDatabase();  
    ContentValues cv=new ContentValues();  
    cv.put(colName, emp.getName()); 
    cv.put(colempId, emp.getempID()); 
    cv.put(colAge, emp.getAge()); 
    cv.put(colMobile, emp.getMobile()); 
    cv.put(colDept, emp.getDept()); 
    //cv.put(colDept,2); 

    db.insert(employeeTable, colName, cv); 
    db.close();  

} 

int getEmployeeCount() 
{ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    Cursor cur= db.rawQuery("Select * from "+employeeTable, null); 
    int x= cur.getCount(); 
    cur.close(); 
    return x; 
} 

Cursor getAllEmployees() 
{ 
    SQLiteDatabase db=this.getWritableDatabase();  
    //Cursor cur= db.rawQuery("Select "+colID+" as _id , "+colName+", "+colAge+" from "+employeeTable, new String [] {}); 
    Cursor cur= db.rawQuery("SELECT * FROM "+viewEmps,null); 
    return cur;   
} 

Cursor getAllDepts() 
{ 
    SQLiteDatabase db=this.getReadableDatabase(); 
    Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id, "+colDeptName+" from "+deptTable,new String [] {});   
    return cur; 
} 

void InsertDepts(SQLiteDatabase db) 
{ 
    ContentValues cv=new ContentValues(); 
     cv.put(colDeptID, 1); 
     cv.put(colDeptName, "Sales"); 
     db.insert(deptTable, colDeptID, cv); 
     cv.put(colDeptID, 2); 
     cv.put(colDeptName, "IT"); 
     db.insert(deptTable, colDeptID, cv); 
     cv.put(colDeptID, 3); 
     cv.put(colDeptName, "HR"); 
     db.insert(deptTable, colDeptID, cv); 
     db.insert(deptTable, colDeptID, cv); 

} 

public String GetDept(int ID) 
{ 
    SQLiteDatabase db=this.getReadableDatabase();  
    String[] params=new String[]{String.valueOf(ID)}; 
    Cursor c=db.rawQuery("SELECT "+colDeptName+" FROM"+ deptTable+" WHERE "+colDeptID+"=?",params); 
    c.moveToFirst(); 
    int index= c.getColumnIndex(colDeptName); 
    return c.getString(index); 
} 

public Cursor getEmpByDept(String Dept) 
{ 
    SQLiteDatabase db=this.getReadableDatabase(); 
    String [] columns=new String[]{"_id",colName,colempId,colAge,colMobile,colDeptName}; 
    Cursor c=db.query(viewEmps, columns, colDeptName+"=?", new String[]{Dept}, null, null, null); 
    return c; 
} 

public int GetDeptID(String Dept) 
{ 
    SQLiteDatabase db=this.getReadableDatabase(); 
    Cursor c=db.query(deptTable, new String[]{colDeptID+" as _id",colDeptName},colDeptName+"=?", new String[]{Dept}, null, null, null); 
    //Cursor c=db.rawQuery("SELECT "+colDeptID+" as _id FROM "+deptTable+" WHERE "+colDeptName+"=?", new String []{Dept}); 
    c.moveToFirst(); 
    return c.getInt(c.getColumnIndex("_id")); 

    } 

public int UpdateEmp(Employee emp) 
{ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    ContentValues cv=new ContentValues(); 
    cv.put(colName, emp.getName()); 
    cv.put(colempId, emp.getempID()); 
    cv.put(colAge, emp.getAge()); 
    cv.put(colMobile, emp.getMobile()); 
    cv.put(colDept, emp.getDept()); 
    return db.update(employeeTable, cv, colID+"=?", new String []{String.valueOf(emp.getID())}); 

} 

public void DeleteEmp(Employee emp) 
{ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    db.delete(employeeTable,colID+"=?", new String [] {String.valueOf(emp.getID())}); 
    db.close(); 

} 
} 

,當我查看頁面上點擊錯誤信息正在逐漸被..

android.database.sqlite.sqlexception: no such column EmpID:, while compiling: select_id, EmployeeName, EmpID, Age, Mobile,DeptName FROM ViewEmps WHERE DeptName=? 

在此先感謝....

+0

請列這真的存在於DDMS中的表.. – OnkarDhane 2012-02-10 10:04:11

+0

使用工具來查看手機上的SQLite數據庫,並檢查沒有任何問題升級... http://stackoverflow.com/questions/2149438/tool-to-請參閱-Android-database-tables-and-data – joshhendo 2012-02-10 10:14:13

+0

@Smith ..我已經檢查過它,列不在表中。 – Nama 2012-02-10 10:15:16

回答

2

你的代碼對我來說看起來很好。你可能最近包括的EmpID表&沒有升級的數據庫版本,或者您可能已經改變的EmpID的defenition所以儘量增加數據庫版本在這裏:

public DatabaseHelper(Context context) 
{ 
    super(context, dbName, null,33); 

    // TODO Auto-generated constructor stub 
} 
+0

是的..它工作正常,當我將其更改爲 super(context,dbname,null,34 ); 謝謝.. – Nama 2012-02-10 10:18:16

0

一旦從設備卸載應用程序,並重新安裝它。 通過DDMS檢查EmpID是否存在。

點擊打開透視圖> DDMS>展開數據文件夾>選擇數據>選擇您的項目(例如:com.android.project>數據>選擇數據庫選擇從設備拉文件,並檢查

相關問題