我想添加三个新表到我现有的sqlite数据库,我遇到了成功升级后不更新数据库版本的问题。下面是运行DatabaseHelper:成功升级后Android升级数据库不更新数据库版本

private static class DatabaseHelper extends SQLiteOpenHelper {

public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {

super(context, name, factory, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

Log.w(TAG, "Current db version is " + db.getVersion());

db.execSQL(ORIGINAL_DATABASE_CREATE);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

Log.w(TAG, "Old Version " + oldVersion + " New Version " + newVersion + " db.getVersion is " + db.getVersion());

db.execSQL(NEW_TABLE_1_DATABASE_CREATE);

db.execSQL(NEW_TABLE_2_DATABASE_CREATE);

db.execSQL(NEW_TABLE_3_DATABASE_CREATE);

db.setVersion(newVersion);

Log.w(TAG, "Version after onUpgrade is " + db.getVersion());

}

}

下面是我的open()函数: ​​3210

下面是我的close()函数:

public void close() {

mDb.close();

mDbHelper.close();

}

第一所以会发生什么运行更高DATABASE_VERSION是第一个onUpgrade日志读出: 旧版本1新版本2 db.getVersion是1

第二个日志是:onUpgrade后 版本是2

但是当数据库被再次访问onUpgrade是跑不更新数据库的版本号,并通过onUpgrade与第一日志中运行后onUpgrade阅读: 旧版本1新版本2 db.getVersion是1

然后,应用程序崩溃,因为它尝试创建一个已经存在的表。

我试过在onUpgrade中也没有手动设置数据库版本。这也没有用。我也尝试通过运行更新版本号...

db.execSQL("PRAGMA user_version = " + newVersion);

...在onUpgrade结尾处。

编辑:

每Aswin Kumar的建议,我已经改变了我onUpgrade到备份我现有的表并删除所有表,然后重新创建它们。这并没有解决我的版本问题。下面是我的onUpgrade和的onCreate:

@Override

public void onCreate(SQLiteDatabase db) {

Log.w(TAG, "Current db version is " + db.getVersion());

db.execSQL(ORIGINAL_DATABASE_CREATE);

db.execSQL(NEW_TABLE_1_DATABASE_CREATE);

db.execSQL(NEW_TABLE_2_DATABASE_CREATE);

db.execSQL(NEW_TABLE_3_DATABASE_CREATE);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

Log.w(TAG, "Old Version " + oldVersion + " New Version " + newVersion + " db.getVersion is " + db.getVersion());

mOldDbContents = backupTables(db);

db.execSQL("DROP TABLE IF EXISTS " + ORIGINAL_DATABASE_CREATE);

db.execSQL("DROP TABLE IF EXISTS " + NEW_TABLE_1_DATABASE_CREATE);

db.execSQL("DROP TABLE IF EXISTS " + NEW_TABLE_2_DATABASE_CREATE);

db.execSQL("DROP TABLE IF EXISTS " + NEW_TABLE_3_DATABASE_CREATE);

onCreate(db);

}

下面是我用它来创建表的sqlite的语句:

private static final String ORIGINAL_DATABASE_CREATE = "create table " + VEHICLE_EXPENSE_TABLE_NAME +

" (" + KEY_ROW_ID + " integer primary key autoincrement, " +

KEY_UNIX_DATE + " integer, " +

KEY_DATE + " not null default current_date, " +

KEY_TIME + " not null default current_time, " +

KEY_DESCRIPTION + " text, " +

KEY_START_MILE + " integer, " +

KEY_END_MILE + " integer, " +

KEY_MILES + " text, " +

KEY_AMOUNT + " text, "

+ KEY_PARTY_ID + " integer)";

private static final String NEW_TABLE_1_DATABASE_CREATE = "CREATE TABLE " + PURCHASE_HISTORY_TABLE_NAME +

"(" + HISTORY_ORDER_ID_COL + " TEXT PRIMARY KEY, " +

HISTORY_STATE_COL + " INTEGER, " +

HISTORY_PRODUCT_ID_COL + " TEXT, " +

HISTORY_DEVELOPER_PAYLOAD_COL + " TEXT, " +

HISTORY_PURCHASE_TIME_COL + " INTEGER)";

private static final String NEW_TABLE_2_DATABASE_CREATE = "CREATE TABLE " + PURCHASED_ITEMS_TABLE_NAME +

"(" + PURCHASED_PRODUCT_ID_COL + " TEXT PRIMARY KEY, " +

PURCHASED_QUANTITY_COL + " INTEGER)";

private static final String NEW_TABLE_3_DATABASE_CREATE = "CREATE TABLE " + TRIAL_LIMIT_TABLE_NAME +

"(" + TRIAL_PRODUCT_ID_COL + " TEXT PRIMARY KEY, " +

TRIAL_PRODUCT_NAME + " TEXT, " +

TRIAL_START_DATE + " INTEGER)";

任何帮助将是巨大的赞赏。

谢谢 凯文

2012-07-27

KevinM

android数据库升级兼容老版本吗,成功升级后Android升级数据库不更新数据库版本...相关推荐

  1. 修改数据库的兼容级别

    /*语法 ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 }参数 database_name 要修改的数据 ...

  2. VB.NET学习笔记:ADO.NET操作ACCESS数据库——OleDbDataAdapter的Update方法更新数据库的秘密(行状态RowState和行版本 DataRowVersion)

    在<数据集DataSet数据管理(DataAdapter查询更新数据库)>一文中提到可以使用OleDbDataAdapter对象的Update方法还可将对 DataSet 所做的更改解析回 ...

  3. 到底是先更新数据库还是先更新缓存?

    很多小伙伴最近都在问我,在系统中引入缓存后,当向数据库中写入数据时,是先写数据库还是先写缓存呢?先写数据库和先写缓存有什么区别吗?今天,我们就一起来聊聊这个话题. 从本质上讲,无论是先写数据库还是先写 ...

  4. mysql乐观锁重试_乐观锁加重试,并发更新数据库一条记录导致:Lock wait timeout exceeded...

    背景: mysql数据库,用户余额表有一个version(版本号)字段,作为乐观锁. 更新方法有事务控制: @Transactional(rollbackFor = Exception.class) ...

  5. 两难!先更新数据库再删缓存?还是先删缓存再更新数据库?

    前言 当我们在做数据库与缓存数据同步时,究竟更新缓存,还是删除缓存,究竟是先操作数据库,还是先操作缓存?本文带大家深度分析数据库与缓存的双写问题,并且给出了所有方案的实现代码方便大家参考. 本篇文章主 ...

  6. Android 7.0 8.0 升级兼容

    一.7.0 问题记录 参考 1. 安装APK报错,FileUriExposedException 2. 调取系统相机崩溃,FileUriExposedException 二.8.0 问题记录 参考 1 ...

  7. android版本向上兼容吗,Android 的向前兼容和向后兼容

    向后兼容和向前兼容的概念 向后兼容(Backwards compatibility):较高版本的程序能够处理较低版本程序产生的数据. 比如word2007版本的word软件可以打开word2003创建 ...

  8. Android Gallery画廊 兼容4.0以上版本

    最近在做Gallery画廊效果时,搜索大量资料,发现很多博主都是2012年写的文章.对于现在的sdk版本,发现拿过来都没有用,效果变形: 非常遗憾,中间的图变形了,或者说没有把转角恢复. 查阅了大量资 ...

  9. 谷歌暗示android wear未来或兼容ios系统!腾讯,传谷歌今年5月将推出iOS版本Android Wear...

    导读:真是如此的话,不远的将来,iPhone 6就能够支持Moto 360. 腾讯科技讯 3月4日,来自法国科技网站01net的报道称,在今年5月举行的谷歌(微博)年度开发者大会中,谷歌将会发布iOS ...

最新文章

  1. AutoCAD .NET Wizard下载地址
  2. 将功补过 树形动态规划
  3. JadePool应用范例:创建China软件项目
  4. 苏泊尔搭载华为鸿蒙系统,华为鸿蒙打算在一年内跨过生死线,拿下16%的市场份额...
  5. 主机安装php网站,php支持虚拟主机(php网站空间)
  6. rssi定位算法 c语言,【论文※】An RSSI Gradient-based AP Localization Algorithm 基于RSSI梯度的AP定位算法...
  7. Lazarus 日志工具 MultiLog
  8. Python语法之com[1][:-7]
  9. java filechannel 性能_FileChannel 和 MappedByteBuffer 实现上有什么不同?为什么性能差这么多?...
  10. 参加2015年TOP100会议的零散笔记
  11. 今天下午又是在教室里坐了一个下午,头有点晕
  12. linux下配置内网ip
  13. 网赚项目 - 利用社区广告牌,空手赚钱创业项目
  14. 相机视场角和焦距_镜头焦距和视场角介绍!
  15. Android水平仪实训报告,水准仪测量实训报告
  16. 行列式【线性代数系列(一)】
  17. 多线程——线程与进程
  18. html 衣服特效,详细介绍HTML5 3D衣服摇摆动画特效如何实现
  19. 在学校图书馆里进入WOS却依然无法搜索文献如何解决?
  20. 身份证合法性校验规则

热门文章

  1. Django笔记(五)
  2. YOLO 人脸识别算法以及应用
  3. 网页特效怎么插HTML代码中,入门:如何把网页特效代码加到自己的网页中?
  4. 想借上市洗白的比特大陆
  5. java生成报表(excel表格)的另类方法
  6. 50个直击灵魂的问题_烦恼很多的时候,问自己10 个直击灵魂的问题
  7. 超融合如何克服启动风暴?云桌面启动风暴的解决办法
  8. WebView清除缓存
  9. java单线程异步_Java 实现异步调用
  10. 别找了!这5个图片素材网站分享给你,每一个都资源满满!