热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

这篇文章主要介绍了Android开发中数据库升级且表添加新列的方法,结合具体实例形式分析了Android数据库升级开发过程中常见问题与相关操作技巧,需要的朋友可以参考下

本文实例讲述了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新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 打开文件管理器_【教程】模组管理器3.1食用指南
    文编:byakko最近有部分小伙伴反应还不会使用unity模组管理器,现在我就给大家讲一下unity模组管理器——从下载到使用。完整视频版以下是无WiF ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
    立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
author-avatar
鉴湖侠ph
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有