浅谈SQLiteOpenHelper之onUpgrade例子
当你看到这个博文,首先你要了解onCreate这个创建方法,再来继续下文!(可以参考我的上一个博文http://www.cnblogs.com/896240130Master/p/6119616.html)
这个onUpgrade类要在onCreate类的基础上建立!我们知道onUpgrade是升级的意思。
看代码:新建一个类SqlText.java
package com.example.sjk;import android.content.Context; import android.database.sqlite.SQLiteCursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log;public class SqlText extends SQLiteOpenHelper{private static final String DB_NAME = "mydata.db"; //数据库名称private static final int version =2; // 当前数据库版本号是升级到2了public SqlText(Context context) {super(context, DB_NAME, null, version);}@Overridepublic void onCreate(SQLiteDatabase db) { //新安装的软件从这里开始String sql_message = "create table t_message (id int primary key,name varchar(50),age varchar(50),sex varchar(10))";//升级的时候增加了一个列sex,所以为了和版本2升级的一样这里也要对应db.execSQL(sql_message);Log.i("onCreate", "你是新用户,我们在帮你创建表--->成功");String sql_up1 = "insert into t_message values(1,'小白','18','男')";db.execSQL(sql_up1);Log.i("onCreate", "你是新用户,我们帮你插入一条数据-->成功");}@Override//在原来的软件上更新会从这里开始,不卸载在线更新public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //本文讨论这个方法if(oldVersion == 1){//如果版本是1.0的,升级下面的内容或修改String sql_upgrade = "alter table t_message add sex varchar(10)";//增加一个列sex db.execSQL(sql_upgrade);String sql_up2 ="insert into t_message values(3,'小红','18','男')";db.execSQL(sql_up2);Log.i("onUpgrade","你在没有卸载的情况下,在线更新了版本2.0,同时列表增加了一个列sex"); }}}
在MainActivity.java 显示
package com.example.sjk;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.TextView;public class MainActivity extends Activity {private SqlText st; //得到SqlText这个类的contextprivate TextView tv; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.TextView);//找到这个TextView组件st = new SqlText(MainActivity.this);String text = query();//调用查询这个方法tv.setText("id \t"+"name\t"+"age\t"+"sex\n"+text+"\n");//显示}public String query(){//查询数据库的数据String result = "";//获取数据库对象SQLiteDatabase db = st.getReadableDatabase();//只读:ReadableDatabase;读写:WritableDatabase//查询数据库中的数据Cursor cursor = db.query("t_message", null, null, null, null, null, null);//结果集for(int i=0;i<cursor.getCount();i++) {cursor.moveToNext();result += cursor.getInt(cursor.getColumnIndex("id"));result += cursor.getString(cursor.getColumnIndex("name"));result += cursor.getString(cursor.getColumnIndex("age")); result += cursor.getString(cursor.getColumnIndex("sex")); }cursor.close();//关闭结果集db.close();//关闭数据库对象return result;}}
现在我们在版本号1上,安装这个新的版本2。也就是说也就是说不卸载版本1,直接覆盖版本2看下图
更新了版本,并且增加了一个列
我们插入的是一条数据,为什么是两条呢,是因为我们在版本1.0的时候就已经有了一条数据,后面sex在1.0的时候没有所以是null,
我们再来第2次测试,卸载安装的。重新安装看看还是原来的数据或者执行的是onCreate方法还是onUpgrade 方法?
结果:
显示:
我们的出一个结论:
当你Android安装一个全新的应用,会从onCreate这个方法里创建。
当你Android在旧版本上更新的时候会从onUpgrade方法里更新。
转载于:https://www.cnblogs.com/896240130Master/p/6128557.html
浅谈SQLiteOpenHelper之onUpgrade例子相关推荐
- 浅谈计算机图书的翻译——“增值翻译”的几个参考例子 (转)
浅谈计算机图书的翻译--"增值翻译"的几个参考例子 (转)[@more@] 我的一篇文章,请大家提提意见( Mailto:w-gao@263.NET">w-gao@ ...
- 浅谈计算机图书的翻译——“增值翻译”的几个参考例子
我的一篇文章,请大家提提意见( w-gao@263.net ),笔者的小小心愿是将"增值翻译"发展成一门可操作性极强的理论,:-) ------------------------ ...
- docker浅谈(通俗易懂-例子-实验-适合初学者)
docker学习浅谈 前言:前段时间看到K8s这玩意儿,听说可以取代docker,docker经常听,但又不知道具体是什么实现原理. 不想看概念,直接操作?点这里:确定吗? 文章目录 docker学习 ...
- 前端类名优秀命名例子_这是一篇需要花费你15分钟阅读的干货!浅谈前端工程化...
01前端工程化的背景 随着业务的扩展.业务需求更加复杂.项目团队的壮大以及项目的增多等.制定一套适用于团队的前端工程化方案很有必要. 02前端工程化是什么 前端工程化是一个很广泛的话题.涉及的技术与解 ...
- 浅谈几种区块链网络攻击以及防御方案之51#37攻击
旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/11/network_attack_of_blockchain_51_attack/ 写在前面的话 自比特币诞生 ...
- 浅谈无缓存I/O操作和标准I/O文件操作区别 (转载)
首先,先稍微了解系统调用的概念: 系统调用,英文名system call,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完 ...
- python中内置的四种数值类型为_浅谈python语言四种数值类型
Python语言支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下.希望对 ...
- 浅谈软件自动化集成测试的流程
浅谈自动化集成测试 相信从事软件测试专业的同行很早就知道了自动化的测试技术,也许大家也很想知道具体的软件自动化具体的运行实施过程.本人学识尚欠,目前无法对综合的软件自动化的测试进行阐述,但是本人通过不 ...
- 我的家乡网页设计_Graphic Design|康石石浅谈LOGO设计在作品集中的创作方法
写在前面的话 平面设计范畴极广,其领域不仅限于常见的版式设计.海报设计.LOGO设计.VI设计.书籍装帧.广告设计.网页设计.在艺术留学申请过程中,学习平面设计的同学们需依据目标院校对作品集项目及页数 ...
最新文章
- AI人工智能工程师 学习大纲
- 解决Redmi 6 pro底部出现黑边问题
- 如何选择python书籍_如何选择一本优质的数据科学书籍
- 一个 SQL 同时验证帐号是否存在、密码是否正确
- amazon 设计 4 vending machine
- 【初体验】valgrind分析程序性能
- hdu 4790 Just Random (2013成都J题) 数学思路题 容斥
- Picasso源码的简单解析(二)
- python opencv 将lena图像嵌入空白画布处
- oracle财务模块设置影响,Oracle 财务模块介绍.ppt
- uiniapp实现微信授权登录
- AD 20 PCB 导入CAD图形错乱-问题笔记
- echats统计图表的设计与实现
- 利用python计算圆球的体积_python计算圆周长、面积、球体体积并画出圆
- fgets()和gets()函数的区别
- 这是昨天的内容,就这样慢慢整吧,然后,荒废了好多时间啊!!
- 计算机视觉技术在图像特征提取中的应用研究,基于图像特征提取的图像融合研究...
- 智付电子支付有限公司举办“反洗钱知识培训”
- ​静态流水线和动态流水线的区别认识
- excel建立层级_适合财务菜鸟看的Excel 教程? Excel 水平仅属于入门级。
热门文章
- ASP.NET 对类进行XML序列化和反序列化
- IRasterStatistics Interface
- 【托管服务qin】WEB网站压力测试教程详解
- 单个节点的缓存容量达到上限 Hash算法一致性
- keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect
- 团队项目计划BACKLOG
- eclipse 函数折叠展开
- Android二维码之创建
- 【思科】GNS3模拟静态NAT/动态NAT
- JavaScript代码片段