我已经为我的应用程序创建了sqlite表,但现在我想在数据库中添加一个新表.
我更改了DB版本如下
private static final int DATABASE_VERSION = 2;
Run Code Online (Sandbox Code Playgroud)
并添加字符串以创建表
private static final String DATABASE_CREATE_color =
"CREATE TABLE IF NOT EXISTS files(color text, incident_id text)";
Run Code Online (Sandbox Code Playgroud)
onCreate并且onUpgrade,如下:
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(DATABASE_CREATE_incident);
database.execSQL(DATABASE_CREATE_audio);
database.execSQL(DATABASE_CREATE_video);
database.execSQL(DATABASE_CREATE_image);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//drop table and add new tables when version 2 released.
db.execSQL(DATABASE_CREATE_color);
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,没有创建新表.我究竟做错了什么?
有没有什么方法可以在Android设备上更新(不重新安装)非市场apk?我只能找到一个adb安装(没有像adb更新)
我正在用数据库做我的第一个应用程序,我在理解onUpgrade函数时遇到了一些麻烦.我的数据库有一个包含项目和收藏列的表格,以便用户可以收藏项目.我看到的大多数实现只是删除表并重新构建它,但我不想这样做.我希望能够在表格中添加更多项目.
当应用程序通过Android市场升级时,数据库是否知道其版本号?那么我可以增加代码中的版本号,然后将其导出到市场,当用户第一次启动升级版本时,将调用onUpgrade吗?
如果是这种情况,我的onUpgrade只会从文件中提取并添加数据库项.这是一种标准的处理方式,还是有更好的方法在Android中处理它.我想尽可能保持标准.
谢谢
假设我在SQLiteOpenHelper中有一个包含2列的数据库表test_table和相应的创建脚本:
DB_VERSION = 1:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B);
}
Run Code Online (Sandbox Code Playgroud)
这是最初的应用版本1,发布在Play商店中.
过了一会儿,应用程序和使用的数据库都有更新.我想SQLiteOpenHelper类必须像这样调整:
DB_VERSION = 2:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B, COL_C)");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSql("ALTER TABLE test_table ADD Column COL_C");
}
Run Code Online (Sandbox Code Playgroud)
一段时间后,另一个应用更新:
DB_VERSION = 3:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B, COL_C, COL_D)");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSql("ALTER TABLE test_table ADD Column COL_D"); …Run Code Online (Sandbox Code Playgroud) 我创建了一个Android应用程序,在启动时检查是否有新版本的应用程序.如果是,则应用程序下载新的apk文件并过度安装新的apk.我的应用程序使用sqlite db.但是这个db,从一个版本到另一个版本都可以改变.我想我必须使用这个方法:
onUpgrade()
Run Code Online (Sandbox Code Playgroud)
但我不确切知道如何使用它.
当我启动应用程序时,我将此代码用于克里特数据库(如果不存在):
DbHelper mDHelper = new DbHelper(context, DB_NAME, null, DB_VERSION)
Run Code Online (Sandbox Code Playgroud)
如果我想使用onUpgrade()方法,我应该改变什么?我什么时候打电话给它?
我正在使用这个DataBaseHelper.class,我被困在onUpgrade()方法上.我不知道如何弄清楚数据库的版本号是什么.我可以将版本设置为1,我第一次发布它,当我发布更新时,我只需将版本设置为2 (myDataBase.setVersion(2);).但只要应用程序正在运行,它就只有2.下一次它将被启动它再次是1.同样的事情发生了private static int DATABASE_VERSION.我正在考虑将版本号存储在一个额外的表中,但在我看来,这似乎不是最佳实践.
那么如何确保版本号在升级后增加并且保留它(分配给private static int DATABASE_VERSION或的值myDataBase.getVersion();)?
DataBaseHelper类:
public class DataBaseHelper extends SQLiteOpenHelper {
//The Android's default system path of your application database.
private static String DB_PATH = "/data/data/com.mydatabase.db/databases/";
private static String DB_NAME = "database.sl3";
private SQLiteDatabase myDataBase;
private final Context myContext;
// Do you need this?
private static int DATABASE_VERSION = 2;
// or is this correct:
// private static int DATABASE_VERSION = myDataBase.getVersion();
/**
* Constructor
* Takes and …Run Code Online (Sandbox Code Playgroud)