Android开发中数据库升级且表添加新列的方法

发布时间 - 2026-01-11 03:27:45    点击率:

本文实例讲述了Android开发中数据库升级且表添加新列的方法。分享给大家供大家参考,具体如下:

今天突然想到我们android版本升级的时候经常会遇到升级版本的时候在新版本中数据库可能会修改,今天我们就以数据库升级且表添加新列为例子写一个测试程序。

首先在要创建一个数据库,一般我们先创建一个DbHelper,继承SQLiteOpenHelper,构造函数我们使用传递版本号的:

public DbHelper(Context context, String name, int version){
  this(context, name, null, version);
}

我们在Activity中初始化DbHelper传入当前应用的版本号,

try {
  ver=getVersionName(getApplicationContext());
} catch (Exception e) {
  e.printStackTrace();
}
myDbHelper = new DbHelper(this,DbHelper.DB_NAME,ver);
db= myDbHelper.getWritableDatabase();

我们通过查看SQLiteOpenHelpe源码知道,当我们调用

getWritableDatabase()

时,会调用

getDatabaseLocked(boolean writable)

方法,往下面看可以看到当版本号大于当前的时候会调用onUpgrade方法,我们可以在这里做升级数据库操作:

final int version = db.getVersion();
if (version != mNewVersion) {
  if (db.isReadOnly()) {
    throw new SQLiteException("Can't upgrade read-only database from version " +
        db.getVersion() + " to " + mNewVersion + ": " + mName);
  }
  db.beginTransaction();
  try {
    if (version == 0) {
      onCreate(db);
    } else {
      if (version > mNewVersion) {
        onDowngrade(db, version, mNewVersion);
      } else {
        onUpgrade(db, version, mNewVersion);
      }
    }
    db.setVersion(mNewVersion);
    db.setTransactionSuccessful();
  } finally {
    db.endTransaction();
  }

因此我在onUpgrade方法中做了表添加新列操作如下:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  if(newVersion>oldVersion)
  {
    db.execSQL("ALTER TABLE local_picc_talk ADD talknumber varchar(20);");
  }
}

这样执行完之后就会多一列talknumber,

select * from sqlite_master where type="table" and name="local_picc_talk";
table|local_picc_talk|local_picc_talk|9|CREATE TABLE local_picc_talk (id integer
 PRIMARY KEY autoincrement,case_no varchar(60),user_no varchar(60),user_name var
char(60),car_no varchar(60),task_work_id varchar(60),talk_content varchar(1000),
time varchar(60),with_talk_no varchar(60),with_talk_name varchar(60), talknumber
 varchar(20), UNIQUE (id))
sqlite> select * from local_picc_talk;

这样就完成了版本升级的时候数据库升级,并且为表添加新的一列。

DEMO代码在:https://github.com/xxnan/DataBaseUpdateTest

或者点击此处本站下载

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android数据库操作技巧总结》、《Android操作SQLite数据库技巧总结》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。


# Android  # 数据库  # 升级  #   # 添加新列  # Android开发使用json实现服务器与客户端数据的交互功能示例  # Android App端与PHP Web端的简单数据交互实现示例  # Android登录注册功能 数据库SQLite验证  # Android数据库操作工具类分享  # Android SQLite数据库版本升级的管理实现  # Android数据传输中的参数加密代码示例  # 创建一个  # 进阶  # 操作技巧  # 就会  # 在这里  # 我在  # 相关内容  # 感兴趣  # 我们可以  # 给大家  # 可以看到  # 点击此处  # 当我们  # 往下  # 更多关于  # 就以  # 经常会  # 所述  # 新版本  # 程序设计 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 详解vue.js组件化开发实践  5种Android数据存储方式汇总  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  javascript如何操作浏览器历史记录_怎样实现无刷新导航  重庆市网站制作公司,重庆招聘网站哪个好?  Swift中swift中的switch 语句  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  详解CentOS6.5 安装 MySQL5.1.71的方法  非常酷的网站设计制作软件,酷培ai教育官方网站?  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  javascript中闭包概念与用法深入理解  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel如何记录自定义日志?(Log频道配置)  Laravel如何为API生成Swagger或OpenAPI文档  如何获取免费开源的自助建站系统源码?  文字头像制作网站推荐软件,醒图能自动配文字吗?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel如何使用Vite进行前端资源打包?(配置示例)  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  javascript中对象的定义、使用以及对象和原型链操作小结  iOS中将个别页面强制横屏其他页面竖屏  个人网站制作流程图片大全,个人网站如何注销?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel如何处理表单验证?(Requests代码示例)  浅谈Javascript中的Label语句  如何快速查询网站的真实建站时间?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  如何安全更换建站之星模板并保留数据?  Laravel怎么在Controller之外的地方验证数据  Laravel如何实现一对一模型关联?(Eloquent示例)  利用JavaScript实现拖拽改变元素大小  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  如何快速搭建虚拟主机网站?新手必看指南  智能起名网站制作软件有哪些,制作logo的软件?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  怎么用AI帮你为初创公司进行市场定位分析?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  高性价比服务器租赁——企业级配置与24小时运维服务  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Java垃圾回收器的方法和原理总结