数据库表Employees没有名为EmpID的列?

时间:2012-02-10 09:46:54

标签: android sqlite

正在做一个小项目来存储员工的详细信息并对其进行修改。我成功了,直到我添加名为EmpID的员工ID列。并且数据未插入显示错误的表中:

 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=?

提前致谢....

2 个答案:

答案 0 :(得分:2)

您的代码对我来说很好。您最近可能已将EmpID包含在表格和表格中。没有升级数据库版本或者您可能已经更改了EmpID的防御,因此请尝试在此处增加DataBase-Version:

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

    // TODO Auto-generated constructor stub
}

答案 1 :(得分:0)

从设备卸载您的应用并重新安装。 通过DDMS检查EmpID是否存在。

点击打开透视> DDMS>展开数据文件夹>选择数据>选择你的项目(例如:com.android.project>数据>选择数据库选择从设备中提取文件并检查