首页 > 解决方案 > 没关系,直到我尝试升级它以再添加一列

问题描述

我正在学习在我的颤振应用程序中使用 sqlflite ..当我第一次升级它时它工作得非常好..但是我想再添加一个列但我实际上不知道查询..所以我尝试了如下所示的查询,但是当我尝试保存数据时,出现此错误:

E/SQLiteLog(22556): (1) 表 tbl_employee 没有名为 employee_gender 的列

I/flutter (22556): DatabaseException(table tbl_employee has no column named employee_gender (code 1 SQLITE_ERROR): , while compile: INSERT OR REPLACE INTO tbl_employee (employee_name, employee_Student, employee_depertment, employee_DOB, employee_gender) VALUES (?, ?, ?, ?, ?)) sql 'INSERT OR REPLACE INTO tbl_employee (employee_name, employee_Student, employee_depertment, employee_DOB, employee_gender) VALUES (?, ?, ?, ?, ?)' args [Adrita, teacher, CMT, 19/00/2020, 2]}

这是我的数据库类:

class DBHelper{
  static final String CREATE_TABLE_EMPLOYEE = ''' 
  create table $TABLE_EMPLOYEE(
  $COL_EMP_ID integer primary key autoincrement,
  $COL_EMP_NAME text not null,
  $COL_EMP_PROFESSION text not null,
  $COL_EMP_DEPARTMENT text not null
  )
  ''';

  static Future<Database> open() async{// to initialize data we used this method
        final dbpath = await getDatabasesPath();//directory
        final path = Path.join(dbpath,'employee.db');//main Path

        return openDatabase(path,version: 3,onCreate: (db, version) async{
          await db.execute(CREATE_TABLE_EMPLOYEE);
        }, onUpgrade: (db, oldVersion, newVersion) async{
          if(newVersion == 2){
            db.execute(''' alter table $TABLE_EMPLOYEE add column $COL_EMP_DOB text ''');

          }
          if(newVersion == 3){
            db.execute('''alter table $TABLE_EMPLOYEE add column $COL_RADIO_BUTTON integer ''');
          }
        },);
  }

  static Future<int> insertEmployee(String table, Map<String, dynamic> map) async {// insert method
    final db = await open();
    return await db.insert(table, map, conflictAlgorithm: ConflictAlgorithm.replace);
  }
  static Future<int> updateEmployee(EmployeeTeacherModel employeemodel) async{
    final db = await open();
    return await db.update(TABLE_EMPLOYEE, employeemodel.toMap(), where: '$COL_EMP_ID = ?', whereArgs: [employeemodel.id]);
  }

  static Future<int> DeleteEmployee(int id) async{
    final db = await open();
    return await db.delete(TABLE_EMPLOYEE,where:  '$COL_EMP_ID = ?', whereArgs: [id]);
  }

  static Future<List<EmployeeTeacherModel>> getAllEmployees() async{
    final db = await open();
    final List<Map<String, dynamic>> map = await db.query(TABLE_EMPLOYEE, orderBy: COL_EMP_NAME);
    return List.generate(map.length, (index){
      return EmployeeTeacherModel.fromMap(map[index]);
    });
  }

  static Future<EmployeeTeacherModel> getEmployeeByid(int id) async{
    final db = await open();
    final List<Map<String, dynamic>> emps  = await db.query(TABLE_EMPLOYEE, where: '$COL_EMP_ID=?',whereArgs: [id]);
    if(emps.length>0){
      return EmployeeTeacherModel.fromMap(emps.first);
    }
    return null;
  }



}

这是模型类:

final String TABLE_EMPLOYEE = "tbl_employee";
final String COL_EMP_ID = "employee_id";
final String COL_EMP_NAME = "employee_name";
final String COL_EMP_DEPARTMENT = "employee_depertment";
final String COL_EMP_PROFESSION = "employee_Student";
final String COL_EMP_DOB = "employee_DOB";
final String COL_RADIO_BUTTON = "employee_gender";

class EmployeeTeacherModel {
  int id;
  String name;
  String depertment;
  String Dob;
  String profession;
  int gender;


  EmployeeTeacherModel({this.id, this.name, this.depertment, this.profession, this.Dob, this.gender});


  Map<String,dynamic> toMap(){//method to insert data into database


    var map = <String, dynamic>{//method
      COL_EMP_NAME : name,
      COL_EMP_PROFESSION: profession,
      COL_EMP_DEPARTMENT: depertment,
      COL_EMP_DOB: Dob,
      COL_RADIO_BUTTON: gender,
    };
    if(id !=null){
      map[COL_EMP_ID] = id;
    }
    return map;
  }

  EmployeeTeacherModel.fromMap(Map<String,dynamic> map){//named constructor to return emoloyee model obj
    id = map[COL_EMP_ID];
    name = map[COL_EMP_NAME];
    profession = map[COL_EMP_PROFESSION];
    depertment = map[COL_EMP_DEPARTMENT];
    Dob = map[COL_EMP_DOB];
    gender = map[COL_RADIO_BUTTON];
  }

  @override
  String toString() {
    return 'EmployeeTeacherModel{id: $id, name: $name, depertment: $depertment, Dob: $Dob, profession: $profession, gender: $gender}';
  }


}

标签: sqldatabasesqliteflutter

解决方案


推荐阅读