2012-09-27 35 views
0

在我的应用我有一个dbhelper课堂,一切都在我的数据库事,我知道我必须使用onUpgrade(SQLiteDatabase分贝,INT oldVersion,INT NEWVERSION)但我在理解问题时遇到了问题,如果我不更新完整的应用程序,我只需要在因特网调用中发现我已更改我的Web表中的版本以便在我的应用程序中删除表并重建他们可以得到新的信息。 这里是我的代码:如何升级我的出库更新我的应用程序的Android

在我的BD帮手:

public class CuestionarioHelper extends SQLiteOpenHelper { 

private static String DB_PATH = "/data/data/myapp.VerCuestionarioEspanol_copy/databases/"; 
private static final String DB_NAME="cuestionario.db"; 
private static final int SCHEMA_VERSION=1; 
private SQLiteDatabase myData; 
public CuestionarioHelper(Context context) { 
    super(context, DB_NAME, null, SCHEMA_VERSION); 
} 
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE Version (_id INTEGER PRIMARY KEY AUTOINCREMENT, version TEXT);"); 
    db.execSQL("CREATE TABLE Cuestionario (_id INTEGER PRIMARY KEY AUTOINCREMENT, pregunta TEXT, respuesta TEXT);"); 
    } 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + "Version"); 
    db.execSQL("DROP TABLE IF EXISTS " + "Cuestionario"); 
    onCreate(db); 
} 

,并在我的mainActivity:

private CuestionarioHelper db = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    db = new CuestionarioHelper(this); 

// here in a class DownloadFileAsync extends AsyncTask<String, String, String> 
    I download the version of the table in the web and if is different than the one 
    already in the db then it calls the table complete information to replace the one 
    in the apps db. 

//Here I verify what table version I have so I can add to a non existing table, 
    do nothing if both versions are the same or replace the bd table if they are different. 

public void verficar(){ 

verify = db.getTableCount(); 
if(verify == 0){ 
    tvVersion.setText("Version nueva "+Version.get(0).version); 
    // download the table information and added to the db 
}else{ 
    if(versionEntrada.equals(db.getVersion())){ 
     tvVersion.setText("Version ya existe "+db.getVersion()); 
      //version is the same do nothing 
    }else{ 
     int oldVersion = Integer.parseInt(db.getVersion()); 
     int newVersion = Integer.parseInt(versionEntrada); 
     db.onUpgrade(db, oldVersion, newVersion);//here is where I don't know 
                //how to call it, this is not working! 
     // download the table information and added to the db 
     tvVersion.setText("Version actualizada "+Version.get(0).version); 
    } 
} 
} 

在db版本表是我存储表的版本也可能是数据库版本,它只有一列和一行,因为它只是一个数字来比较我的网络表版本。

回答

2

你应该让你的SCHEMA_VERSION not final,并通过该版本作为一个参数:

改变这些线路

private static final int SCHEMA_VERSION=1; 
public CuestionarioHelper(Context context) { 
    super(context, DB_NAME, null, SCHEMA_VERSION); 
} 

到(注意SCHEMA_VERSION被删除)

public CuestionarioHelper(Context context, int version) { 
    super(context, DB_NAME, null, version); 
} 
+0

应该怎么彻底删除SCHEMA_VERSION还是像这样写的? private static int SCHEMA_VERSION = 1; – zvzej

+0

所以我假设这个变化我从主要活动传递从网上找到的int版本,如果这是它是如何工作的,db helper类自己检查,如果该版本不同于以前的数据库中存储了什么,如果不同或者我必须从主Activity调用onUpgrade,它自己调用onUpgrade? – zvzej

+0

是的,它会自动检查并呼叫升级。是的,显然你必须将这个参数传递给调用者的构造函数,在这种情况下你的活动。还有一个是:删除SCHEMA_VERSION字段。 –

相关问题