前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发中数据库升级且表添加新列的方法

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

作者头像
砸漏
发布2020-10-22 10:08:47
3K0
发布2020-10-22 10:08:47
举报
文章被收录于专栏:恩蓝脚本

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

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

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

代码语言:javascript
复制
public DbHelper(Context context, String name, int version){
  this(context, name, null, version);
}

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

代码语言:javascript
复制
try {
  ver=getVersionName(getApplicationContext());
} catch (Exception e) {
  e.printStackTrace();
}
myDbHelper = new DbHelper(this,DbHelper.DB_NAME,ver);
db= myDbHelper.getWritableDatabase();

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

代码语言:javascript
复制
getWritableDatabase()

时,会调用

代码语言:javascript
复制
getDatabaseLocked(boolean writable)

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

代码语言:javascript
复制
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方法中做了表添加新列操作如下:

代码语言:javascript
复制
@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,

代码语言:javascript
复制
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程序设计有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档