我试图在我的SQLite数据库中添加一些列。我一直遇到以下错误:“no such column: n_livello
(例如新添加的列I&m;添加)
,应用程序安装失败并显示timeout
。
似乎永远不会调用onUpgrade()方法。
这是我的代码:
public class Main extends Activity {
Context context;
DBHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = this.getApplicationContext();
db = new DBHelper(context);
}
}
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "geko";
static final int DATABASE_VERSION = 2;
public DBHelper(Context context){
super(context, DATABASE_NAME , null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_FRA_TABLE = "CREATE TABLE IF NOT EXISTS "+ FRA_TABLE_NAME + " ("
+ FRA_COLUMN_ID + " INTEGER PRIMARY KEY, "
+ FRA_COLUMN_USERNAME + " TEXT, "
+ FRA_COLUMN_NUM_LIVELLO + "INTEGER, "
+ FRA_COLUMN_LIVELLO + " TEXT, "
+ FRA_COLUMN_TEMPO + " TEXT, "
+ FRA_COLUMN_DATA_PARTITA + " TEXT,"
+ FRA_COLUMN_INVIATO + " INTEGER)";
db.execSQL(CREATE_FRA_TABLE);
String CREATE_ING_TABLE = "CREATE TABLE IF NOT EXISTS "+ ING_TABLE_NAME + " ("
+ ING_COLUMN_ID + " INTEGER PRIMARY KEY, "
+ ING_COLUMN_USERNAME + " TEXT, "
+ ING_COLUMN_NUM_LIVELLO + "INTEGER, "
+ ING_COLUMN_LIVELLO + " TEXT, "
+ ING_COLUMN_TEMPO + " TEXT, "
+ ING_COLUMN_DATA_PARTITA + " TEXT,"
+ ING_COLUMN_INVIATO + " INTEGER)";
db.execSQL(CREATE_ING_TABLE);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+ FRA_TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS "+ ING_TABLE_NAME);
onCreate(db);
}
}
感谢您的帮助。
[编辑]
我检查过并且没有调用onUpgrade()。当我尝试创建一个关于我试图添加的新字段的查询时,显然我收到了错误。也许我正在以错误的方式声明DBHelper类...
我在主要活动中添加了代码DBHelper
。
答案 0 :(得分:2)
在列名和数据类型之间添加一个空格:
+ ING_COLUMN_NUM_LIVELLO + "INTEGER, "
对两个表重复。
最后,请递增数据库版本或卸载您的应用,以便onCreate()
再次运行,可以通过onUpgrade()
或直接运行。 When is SQLiteOpenHelper onCreate() / onUpgrade() run?
答案 1 :(得分:1)
在类的构造函数中,扩展SQLiteOpenHelper会增加数据库的版本 例如:
public MyDBHelper(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
其中DATABASE_VERSION应该是一个整数,其值大于您在数据库模式的先前版本中使用的值
答案 2 :(得分:1)
尝试将(^|[^\d])(\d{1,3}(\.\d{1,3}){1,3})($|[^\d])
放在@Override
这是一个问题link,涵盖调用onUpgrade
的重要时间和原因。