Android SQLiteException:没有这样的列:basal(代码1)

Android SQLiteException:没有这样的列:basal(代码1),android,sqlite,Android,Sqlite,我正在处理数据库,我有以下DataBaseHandling类: public class DatabaseHandler extends SQLiteOpenHelper { // All Static variables // Database Version private static final int DATABASE_VERSION = 4; // Database Name private static final String DATABASE_MEASURES = "mea

我正在处理数据库,我有以下DataBaseHandling类:

public class DatabaseHandler extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 4;

// Database Name
private static final String DATABASE_MEASURES = "measuresDataBase";

// Measures table name
private static final String TABLE_MEASURES = "measures";

// Measures Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_DATE = "date";
private static final String KEY_TIME_HOUR = "timeHour";
private static final String KEY_TIME_MINUTE = "timeMinute";
private static final String KEY_BE_INTAKE = "be_intake";
private static final String KEY_GLUCOSE = "glucose";
private static final String KEY_BOLUS = "bolus";
private static final String KEY_BASAL = "basal";

public DatabaseHandler(Context context) {
    super(context, DATABASE_MEASURES, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_MEASURES_TABLE = "CREATE TABLE " + TABLE_MEASURES + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT,"
            + KEY_TIME_HOUR + " INTEGER NOT NULL," + KEY_TIME_MINUTE
            + " INTEGER NOT NULL," + KEY_BE_INTAKE + " REAL NOT NULL,"
            + KEY_GLUCOSE + " REAL NOT NULL," + KEY_BOLUS
            + " REAL NOT NULL," + KEY_BASAL + "REAL NOT NULL," + ")";

    db.execSQL(CREATE_MEASURES_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed

    db.execSQL("DROP TABLE IF EXISTS " + TABLE_MEASURES);

    // Create tables again
    onCreate(db);
}

// Adding new contact
public void addMeasure(Measures m) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_DATE, m.getDate());
    values.put(KEY_TIME_HOUR, m.getTimeHour());
    values.put(KEY_TIME_MINUTE, m.getTimeMinute());
    values.put(KEY_BE_INTAKE, m.getBolus());
    values.put(KEY_GLUCOSE, m.getGlucose()); // Contact Name
    values.put(KEY_BOLUS, m.getBolus()); // Contact Phone Number
    values.put(KEY_BASAL, m.getBasal());

    // Inserting Row
    db.insert(TABLE_MEASURES, null, values);
    db.close(); // Closing database connection
}

public Measures getLastMeasure(String date) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_MEASURES, new String[] { KEY_ID,
            KEY_DATE, KEY_TIME_HOUR, KEY_TIME_MINUTE, KEY_BE_INTAKE,
            KEY_GLUCOSE, KEY_BOLUS, KEY_BASAL }, KEY_DATE + "=?",
            new String[] { date }, null, null,
            KEY_TIME_HOUR + " DESC, " + KEY_TIME_MINUTE + " DESC", "1");
    if (cursor != null)
        cursor.moveToFirst();

    Measures m = new Measures(Long.parseLong(cursor.getString(0)), // id
            cursor.getString(1), // date
            Integer.parseInt(cursor.getString(2)), // timeHour
            Integer.parseInt(cursor.getString(3)), // timeMinute
            Double.parseDouble(cursor.getString(4)), // BE intake
            Double.parseDouble(cursor.getString(5)), // glucose
            Double.parseDouble(cursor.getString(6)), // bolus
            Double.parseDouble(cursor.getString(7)) // basal

    );
    // return m
    return m;
}

// Getting All Measures
public List<Measures> getAllMeasures() {
    List<Measures> measureList = new ArrayList<Measures>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_MEASURES;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Measures m = new Measures();
            m.setId(Long.parseLong(cursor.getString(0)));
            m.setDate(cursor.getString(1));
            m.setTimeHour(Integer.parseInt(cursor.getString(2)));
            m.setTimeMinute(Integer.parseInt(cursor.getString(3)));
            m.setBe_intake(Double.parseDouble(cursor.getString(4)));
            m.setGlucose(Double.parseDouble(cursor.getString(5)));
            m.setBolus(Double.parseDouble(cursor.getString(6)));
            m.setBasal(Double.parseDouble(cursor.getString(7)));
            // Adding measure to list
            measureList.add(m);
        } while (cursor.moveToNext());
    }

    // return contact list
    return measureList;
}
公共类DatabaseHandler扩展了SQLiteOpenHelper{
//所有静态变量
//数据库版本
私有静态最终int数据库_VERSION=4;
//数据库名称
私有静态最终字符串数据库\u MEASURES=“measuresDataBase”;
//度量表名
私有静态最终字符串表\u MEASURES=“MEASURES”;
//度量表列名称
私有静态最终字符串密钥\u ID=“ID”;
私有静态最终字符串键\u DATE=“DATE”;
私有静态最终字符串键\u TIME\u HOUR=“timeHour”;
私有静态最终字符串键\u TIME\u MINUTE=“timeMinute”;
私有静态最终字符串键\u BE\u-intraction=“BE\u-intraction”;
私有静态最终字符串密钥\u GLUCOSE=“GLUCOSE”;
私有静态最终字符串密钥\u BOLUS=“BOLUS”;
私有静态最终字符串键\u basic=“basic”;
公共数据库处理程序(上下文){
super(上下文、数据库度量、null、数据库版本);
}
//创建表
@凌驾
public void onCreate(SQLiteDatabase db){
字符串CREATE_MEASURES_TABLE=“CREATE TABLE”+TABLE_MEASURES+”(“
+键ID+“整数主键”+“键日期+”文本
+按键时间小时+整数不为空,+按键时间分钟
+整数不为空,“+键不为空”+“实值不为空,”
+键葡萄糖+“实际值不为空,”+键葡萄糖丸
+“实不为空,”+KEY_base+“实不为空,”+”;
execSQL(创建度量值表);
}
//升级数据库
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
//删除旧表(如果存在)
db.execSQL(“如果存在,则删除表”+表度量);
//再次创建表
onCreate(db);
}
//添加新联系人
公共措施(措施m){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(KEY_DATE,m.getDate());
put(KEY_TIME_HOUR,m.getTimeHour());
value.put(KEY_TIME_MINUTE,m.getTimeMinute());
value.put(KEY_BE_take,m.getBolus());
value.put(KEY_GLUCOSE,m.getGlucose());//联系人姓名
value.put(KEY_BOLUS,m.getBolus());//联系电话号码
value.put(KEY_BASAL,m.getBasal());
//插入行
db.insert(表_度量值,空,值);
db.close();//关闭数据库连接
}
公共度量值getLastMeasure(字符串日期){
SQLiteDatabase db=this.getReadableDatabase();
Cursor Cursor=db.query(表度量,新字符串[]{KEY\u ID,
关键日期、关键时间、关键时间、关键分钟、关键时间,
关键点葡萄糖,关键点丸,关键点基础,关键点日期+“=?”,
新字符串[]{date},null,null,
按键时间小时+描述+按键时间分钟+描述1);
如果(光标!=null)
cursor.moveToFirst();
度量值m=新度量值(Long.parseLong(cursor.getString(0)),//id
cursor.getString(1),//日期
Integer.parseInt(cursor.getString(2)),//timeHour
Integer.parseInt(cursor.getString(3)),//timeMinute
Double.parseDouble(cursor.getString(4)),//BE
Double.parseDouble(cursor.getString(5)),//葡萄糖
Double.parseDouble(cursor.getString(6)),//bolus
Double.parseDouble(cursor.getString(7))//base
);
//返回m
返回m;
}
//采取一切措施
公共列表getAllMeasures(){
List measureList=new ArrayList();
//选择所有查询
String selectQuery=“SELECT*FROM”+表\u度量;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
//循环遍历所有行并添加到列表
if(cursor.moveToFirst()){
做{
度量m=新度量();
m、 setId(Long.parseLong(cursor.getString(0));
m、 setDate(cursor.getString(1));
m、 setTimeHour(Integer.parseInt(cursor.getString(2));
m、 setTimeMinute(Integer.parseInt(cursor.getString(3));
m、 setBe_摄入(Double.parseDouble(cursor.getString(4));
m、 setGlucose(Double.parseDouble(cursor.getString(5));
m、 setBolus(Double.parseDouble(cursor.getString(6));
m、 setBasal(Double.parseDouble(cursor.getString(7));
//将措施添加到列表中
测量列表添加(m);
}while(cursor.moveToNext());
}
//返回联系人列表
回报计量师;
}
日志显示:

android.database.sqlite.SQLiteException:无此列:基础(代码1),编译时:选择id、日期、时间小时、时间分钟、be_摄入量、葡萄糖、丸量、基础,其中日期=?按时间小时顺序描述限制1

我会感谢你的帮助

我的Logcat(解决第一个问题后)

08-27 14:34:51.316:E/AndroidRuntime(772):致命异常:主 08-27 14:34:51.316:E/AndroidRuntime(772):android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0 08-27 14:34:51.316:E/AndroidRuntime(772):在android.database.AbstractCursor.checkPosition(AbstractCursor.java:418) 08-27 14:34:51.316:E/AndroidRuntime(772):在android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 08-27 14:34:51.316:E/AndroidRuntime(772):在android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 08-27 14:34:51.316:E/AndroidRuntime(772):在com.example.t1diabetes.DatabaseHandler.getlastmasure(DatabaseHandler.java:92) 08-27 14:34:51.316:E/AndroidRuntime(772):在com.example.t1diabetes.Mymeasures.calculatebal(Mymeasures.java:263) 08-27 14:34:51.316:E/AndroidRuntime(772):在com.example.t1diabetes.Mymeasures.access$1(Mymeasures.java:262) 08-27 14:34:51.316:E/AndroidRuntime(772):在com.example.t1diabetes.Mymeasures$1.onClick(Mymeasures.java:99) 08-27 14:34:51.316:E/AndroidRuntime(772):在android.view.view.performClick(view.java:4)上
String CREATE_MEASURES_TABLE = "CREATE TABLE " + TABLE_MEASURES + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT,"
            + KEY_TIME_HOUR + " INTEGER NOT NULL," + KEY_TIME_MINUTE
            + " INTEGER NOT NULL," + KEY_BE_INTAKE + " REAL NOT NULL,"
            + KEY_GLUCOSE + " REAL NOT NULL," + KEY_BOLUS
            + " REAL NOT NULL," + KEY_BASAL + " REAL NOT NULL" + ")";


if (cursor != null && cursor .getCount()>0){

        cursor.moveToFirst();

///

}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_MEASURES_TABLE = "CREATE TABLE " + TABLE_MEASURES + "("
        + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT,"
        + KEY_TIME_HOUR + " INTEGER NOT NULL," + KEY_TIME_MINUTE
        + " INTEGER NOT NULL," + KEY_BE_INTAKE + " REAL NOT NULL,"
        + KEY_GLUCOSE + " REAL NOT NULL," + KEY_BOLUS
        + " REAL NOT NULL," + KEY_BASAL + "REAL NOT NULL," + ")";

db.execSQL(CREATE_MEASURES_TABLE);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_MEASURES_TABLE = "CREATE TABLE " + TABLE_MEASURES + "("
        + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT,"
        + KEY_TIME_HOUR + " INTEGER NOT NULL," + KEY_TIME_MINUTE
        + " INTEGER NOT NULL," + KEY_BE_INTAKE + " REAL NOT NULL,"
        + KEY_GLUCOSE + " REAL NOT NULL," + KEY_BOLUS
        + " REAL NOT NULL," + KEY_BASAL + " REAL NOT NULL" + ")";

db.execSQL(CREATE_MEASURES_TABLE);
}
String CREATE_MEASURES_TABLE = "CREATE TABLE " + TABLE_MEASURES + "("
        + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_DATE + " TEXT,"
        + KEY_TIME_HOUR + " INTEGER NOT NULL," + KEY_TIME_MINUTE
        + " INTEGER NOT NULL," + KEY_BE_INTAKE + " REAL NOT NULL,"
        + KEY_GLUCOSE + " REAL NOT NULL," + KEY_BOLUS
        + " REAL NOT NULL," + KEY_BASAL + " REAL NOT NULL" + ")";
KEY_BASAL + "REAL NOT NULL," + ")";
                          ^
                          | Here
KEY_BASAL + "REAL NOT NULL," + ")";
             ^
             | Here