如何向android sql添加列?
我尝试将三列添加到包含8列的exist数据库中 我已经找到了一些解决方案,可以在如何向android sql添加列?,android,android-sqlite,Android,Android Sqlite,我尝试将三列添加到包含8列的exist数据库中 我已经找到了一些解决方案,可以在onUpgradeoverride方法中键入代码,并尝试将列添加到我的exist数据库中。不幸的是,我得到了如下错误java.lang.IllegalStateException:无法从CursorWindow读取第0行第8列。在从光标访问数据之前,确保光标已正确初始化。 这是我关于onCreat和onUpgrade的代码: public class DatabaseHandler extends SQLiteOpe
onUpgrade
override方法中键入代码,并尝试将列添加到我的exist数据库中。不幸的是,我得到了如下错误java.lang.IllegalStateException:无法从CursorWindow读取第0行第8列。在从光标访问数据之前,确保光标已正确初始化。
这是我关于onCreat
和onUpgrade
的代码:
public class DatabaseHandler extends SQLiteOpenHelper {
private String TAG = DatabaseHandler.class.getCanonicalName();
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "contactsManager";
// Contacts table name
private static final String TABLE_CONTACTS = "contacts";
// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_DATE = "date";
private static final String KEY_BMORNING = "bMorning";
private static final String KEY_AMORNING = "aMorning";
private static final String KEY_BNOON = "bNoon";
private static final String KEY_ANOON = "aNoon";
private static final String KEY_BNIGHT = "bNight";
private static final String KEY_ANIGHT = "aNight";
private static final String KEY_BEXERCISE = "bExercise";
private static final String KEY_AEXERCISE = "aExercise";
private static final String KEY_COMMENT = "comment";
String date, value;
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("table is here");
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT,"
+ KEY_BMORNING + " TEXT," + KEY_AMORNING + " TEXT,"
+ KEY_BNOON + " TEXT," + KEY_ANOON + " TEXT,"
+ KEY_BNIGHT + " TEXT," + KEY_ANIGHT + " TEXT" +
")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Drop order table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
Log.d(TAG, "DB Version =>" + db.getVersion()); // Can't see it on logcat
if (oldVersion < 2) {
db.execSQL("ALTER TABLE " + TABLE_CONTACTS + " ADD COLUMN " + KEY_BEXERCISE + " TEXT;");
db.execSQL("ALTER TABLE " + TABLE_CONTACTS + " ADD COLUMN " + KEY_AEXERCISE + " TEXT;");
db.execSQL("ALTER TABLE " + TABLE_CONTACTS + " ADD COLUMN " + KEY_COMMENT + " TEXT;");
} if (oldVersion < 3) {
//do nothing temporarily
}
//Create table again
onCreate(db);
}
}
公共类DatabaseHandler扩展了SQLiteOpenHelper{
私有字符串标记=DatabaseHandler.class.getCanonicalName();
//所有静态变量
//数据库版本
私有静态最终int数据库_VERSION=1;
//数据库名称
私有静态最终字符串数据库\u NAME=“contactsManager”;
//联系人表名称
专用静态最终字符串表\u CONTACTS=“CONTACTS”;
//联系人表列名称
私有静态最终字符串密钥\u ID=“ID”;
私有静态最终字符串键\u DATE=“DATE”;
私有静态最终字符串键\u BMORNING=“BMORNING”;
私有静态最终字符串键\u AMORNING=“AMORNING”;
私有静态最终字符串键\u BNOON=“BNOON”;
私有静态最终字符串键\u ANOON=“ANOON”;
私有静态最终字符串密钥\u BNIGHT=“BNIGHT”;
私有静态最终字符串键\u ANIGHT=“ANIGHT”;
私有静态最终字符串键\u BEXERCISE=“BEXERCISE”;
私有静态最终字符串键\u AEXERCISE=“AEXERCISE”;
私有静态最终字符串键\u COMMENT=“COMMENT”;
字符串日期、值;
公共数据库处理程序(上下文){
super(上下文、数据库名称、null、数据库版本);
}
//创建表
@凌驾
public void onCreate(SQLiteDatabase db){
System.out.println(“表在这里”);
字符串CREATE_CONTACTS_TABLE=“CREATE TABLE”+TABLE_CONTACTS+”(“
+键ID+“整数主键”+“键日期+”文本
+按键+装饰+文字,“+按键+装饰+文字,”
+按键按钮+“文本,”+按键按钮+“文本,”
+按键右键+文本,“+按键右键+文本”+
")";
execSQL(创建联系人表);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
//删除订单表(如果存在)
db.execSQL(“如果存在删除表”+表_联系人);
Log.d(标记“DB Version=>”+DB.getVersion());//在logcat上看不到它
如果(旧版本<2){
db.execSQL(“ALTER TABLE”+TABLE_CONTACTS+“ADD COLUMN”+KEY_BEXERCISE+“TEXT;”);
db.execSQL(“ALTER TABLE”+TABLE_CONTACTS+“ADD COLUMN”+KEY_AEXERCISE+“TEXT;”);
db.execSQL(“ALTER TABLE”+TABLE_CONTACTS+“ADD COLUMN”+KEY_COMMENT+“TEXT;”);
}如果(旧版本<3){
//暂时什么也不做
}
//再次创建表
onCreate(db);
}
}
以下是我关于启动数据库代码的主要活动:
DatabaseHandler db = new DatabaseHandler(getActivity());
Log.d("Insert: ", "Inserting...");
Log.d("Reading: ", "Reading all contact...");
List<Contact> contacts = db.getAllContacts(); // this code cause the error happen
DatabaseHandler db=newdatabasehandler(getActivity());
Log.d(“插入:”,“插入…”);
日志d(“读取:”,“读取所有联系人…”);
列出联系人=db.getAllContacts();//此代码导致错误发生
我想可能是因为override方法onUpgrade
没有触发器,因为我看不到我的日志数据库版本
我真的搞不懂
任何帮助都将不胜感激。提前感谢。将数据库版本增加1,然后再次运行