没有这样的列:_id(代码1):,而正在编译:SELECT _id,姓名,年龄,性别,薪水,主题FROM Teachers

时间:2019-03-09 21:33:25

标签: android sqlite

我的fetch();函数

public Cursor fetch() {
    String[] columns = new String[] { databaseHelper.teacher_ID,databaseHelper.teacher_Name,databaseHelper.Age,databaseHelper.Gender,databaseHelper.Salary,databaseHelper.subject};
    Cursor cursor = database.query(databaseHelper.Table_Name, columns, null, null, null, null, null);
    if (cursor != null) {
        cursor.moveToFirst();
    }
    return cursor;
}

我的主叫处

  final String [] from =new String[]{databaseHelper.teacher_ID,databaseHelper.teacher_Name,databaseHelper.Gender,databaseHelper.Age,databaseHelper.subject,databaseHelper.Salary
};

final int [] to =new int[]{R.id.id,R.id.name,R.id.age,R.id.gender,R.id.salary,R.id.subject};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    dbManger=new DBManger(this);
    dbManger.open();

    Cursor cursor= dbManger.fetch();

这是我的桌子

public final static String Table_Name="Teachers";

public static final String teacher_ID="_id";


public static final String teacher_Name="Name";


public static final String subject="subject";


public static final String Salary="salary";


public static final String Gender="gender";


public static final String Age="Age";

公共最终静态字符串DB_Name =“ School”;

public  static final int Version=1;


private static final String Create_table="create table "+ Table_Name + "(" + teacher_ID +" INTEGER PRIMARY KEY AUTOINCREMENT , "+ teacher_Name +" TEXT NOT NULL, "+ subject +" TEXT NOT NULL , "+
Salary +" INTEGER NOT NULL , "+Gender+" TEXT NOT NULL, "+ Age+ " INTEGER NOT NULL);";

1 个答案:

答案 0 :(得分:0)

考虑Create_table解析为字符串

create table Teachers(
    _id INTEGER PRIMARY KEY AUTOINCREMENT, 
    Name TEXT NOT NULL, 
    subject TEXT NOT NULL, 
    salary INTEGER NOT NULL, 
    gender TEXT NOT NULL, 
    Age INTEGER NOT NULL
);

哪个是有效的有效SQL,然后未找到该列的最可能的原因是实际上没有使用上述SQL。

最常见(如果不是最常见)的原因之一是由于对数据库帮助器(该类是SQLiteOpenHelper的子类)中的 onCreate 方法存在误解。

onCreate 仅在创建数据库本身时自动运行,除非删除数据库,否则将自动运行一次,在这种情况下, onCreate 方法将再次运行。

因此,如果对数据库的结构进行了更改(例如,添加了新列),那么除非删除数据库,否则该更改将不会反映出来

  • 如果onUpgrade方法遵循典型的删除表的方式,然后调用 onCreate 方法,这也会重新创建表。

解决该问题的方法很可能是执行以下一项操作:-

  • 从设置中删除/清除应用数据
  • 卸载应用

,然后重新运行该应用程序。