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


相关推荐: QQ浏览器网页版登录入口 个人中心在线进入  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  海南网站制作公司有哪些,海口网是哪家的?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Python文件操作最佳实践_稳定性说明【指导】  PHP正则匹配日期和时间(时间戳转换)的实例代码  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  C++时间戳转换成日期时间的步骤和示例代码  网站建设要注意的标准 促进网站用户好感度!  如何快速搭建二级域名独立网站?  如何在万网自助建站中设置域名及备案?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  网页设计与网站制作内容,怎样注册网站?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  HTML 中动态设置元素 name 属性的正确语法详解  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  高性价比服务器租赁——企业级配置与24小时运维服务  bootstrap日历插件datetimepicker使用方法  用yum安装MySQLdb模块的步骤方法  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  网站图片在线制作软件,怎么在图片上做链接?  JS弹性运动实现方法分析  如何在腾讯云服务器快速搭建个人网站?  如何快速搭建高效WAP手机网站吸引移动用户?  英语简历制作免费网站推荐,如何将简历翻译成英文?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  在Oracle关闭情况下如何修改spfile的参数  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel怎么判断请求类型_Laravel Request isMethod用法  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  js实现点击每个li节点,都弹出其文本值及修改  详解jQuery中的事件  大同网页,大同瑞慈医院官网?  Python制作简易注册登录系统  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  如何在Tomcat中配置并部署网站项目?  ,怎么在广州志愿者网站注册?  javascript基于原型链的继承及call和apply函数用法分析  Laravel怎么清理缓存_Laravel optimize clear命令详解  EditPlus中的正则表达式 实战(4)  EditPlus中的正则表达式 实战(1)  高端云建站费用究竟需要多少预算?  *服务器网站为何频现安全漏洞?  如何快速上传自定义模板至建站之星?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?