Android SQLite不会在onUpgrade()上执行

时间:2015-04-23 13:04:09

标签: android sqlite database-update

我试图在我的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

3 个答案:

答案 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的重要时间和原因。