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

标签 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(?, ?, ?, ?, ?);

我不知道问题出在哪里..这是我用于创建数据库表的数据库助手代码..任何人都可以帮助我..

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

提前致谢....

最佳答案

我觉得你的代码没问题。您可能最近将 EmpID 添加到表中并且未升级数据库版本,或者您可能更改了 EmpID 的定义,因此请尝试在此处增加数据库版本:

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

    // TODO Auto-generated constructor stub
}

关于android - 数据库表 Employees 没有名为 EmpID 的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225756/

相关文章:

Android Firebase 否定 ServerValue.TIMESTAMP 用于订购

android - MapView.onMapReady 从未在 Fragment 中调用以在 MapView 中加载 Google map

java - Android USB 连接状态;

android - 升级到Android Studio 3后,Gradle依赖项错误

python将独特的项目添加到一个巨大的表中

ios - UITableView 无法识别 NumberOfRowsInSection

objective-c - 如何将两个 SQLite SELECT 语句与两个条件结合起来

ruby-on-rails - 从 Sqlite3 迁移到 PostgreSQL Rails

objective-c - 我应该使用 SQLite 来添加此功能吗?

java - 注销 Facebook Android SDK