Android Sqlite数据库的升级(二)

大数据学习笔记-------------------(23) 第23章数据表操作 23.1创建数据表 创建数据表和在表中插入数据。HIVE创建数据表的语法和SQL创建数据表非常类似。 23.1.1 创建数据表 HIVE创建数据表的语句如下:CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name [(col_name data_type [COMMENT co 阅读详情

Android Sqlite数据库的升级(二)


Sqlite 仅仅支持 ALTER TABLE 语句的一部分功能,我们可以用 ALTER TABLE 语句来更改一个表的名字,也可向表中增加一个字段(列),但是我们不能删除一个已经存在的字段,或者更改一个已经存在的字段的名称、数据类型、限定符等等。

那么当我们需要修改一个字段A的属性,比如从int升级到long(其实Integer可以表示这2种类型了,就不存在这个假设了)类型,有如下2种方法。

法1:增加一个新的long字段B来代替原先的字段A,并且新增一个字段C来区分原有的旧数据A和新数据B,用于查询时区分用A还是用B来表示字段A和B表示的意义。

法2:通过新建一个新表,修改字段属性,然后将数据copy过来。

(1)改变表名: ALTER TABLE 旧表名 RENAME TO 新表名 

(2)创建新表:

(3)复制数据:

  • 当只是改变字段属性时,通过如下方法copy数据
String copyInfo = "insert into " + DB_TABLE + " select * from temp";//表结构一致,只是列的属性修改,比如int修改到long
  • 当修改删除了字段后,通过如下方法copy数据
String copyInfo = "insert into " + DB_TABLE + " (" +  COLUMN_NAME + ", " + COLUMN_DES + ") select " + COLUMN_NAME + ", " + COLUMN_DES + " from temp";

(4)删除临时表: temp是临时表名

drop table temp


部分代码:

//修改字段属性或者删除字段
	private void modifyDb(SQLiteDatabase db){
		Log.e("db", "修改数据库结构");
		db.beginTransaction();
		try {
			//重命名
			final String tempTable = "temp";//临时表名
			final String renameDB = "alter table " + DB_TABLE + " rename to " + tempTable;//重命名为tempTable
			db.execSQL(renameDB);
			//创建新表
			onUpgrade(db, 0, DB_VERSION - 1);//执行原先的旧表的创建包括升级过程(不包括本版本,故减1),创建时使用修改过的sql语句
//			//或者 
//		    for (int version = 1; version < DB_VERSION; version++) {
//				upgradeTo(db, version);
//			}
			
			//插数据入
			String copyInfo = "insert into " + DB_TABLE + " select * from " + tempTable;//表结构一致,只是列的属性修改,比如int修改到long
			//复制部分字段
			//String copyInfo = "insert into " + DB_TABLE + " (" +  COLUMN_NAME + ", " + COLUMN_DES + ") select " + COLUMN_NAME + ", " + COLUMN_DES + " from " + tempTable;
			//String copyInfo = "insert into " + DB_TABLE + " (" +  COLUMN_NAME  + ") select " + COLUMN_NAME  + " from " + tempTable;
			db.execSQL(copyInfo);
			
			//由于在Sqlite中使用自增长字段,引擎会自动产生一个sqlite_sequence表,用于记录每个表的自增长字段的已使用的最大值,所以要一起更新下。如果有没有设置自增长,则跳过此步骤。
			String update_seq = "update sqlite_sequence set seq = 3 where name = " + DB_TABLE;//3是位置值
			//删除临时表
			//db.execSQL("drop table " + tempTable);//可以用这个来验证是否成功修改成功了
			db.setTransactionSuccessful(); //设置成功
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			db.endTransaction(); 
		}
	}



//向表中插入数据

private void insert(){
	    	SQLiteDatabase db = null;
	    	try { 
	    		MyDBHelper dbHelper = new MyDBHelper(getApplicationContext(), DB_NAME, null, DB_VERSION);
	    		db = dbHelper.getReadableDatabase();
	    		for(int i = 0; i < 4; i++){
		    		ContentValues values = new ContentValues();
		    		values.put(MyDBHelper.COLUMN_NAME, "name" + i);
		    		values.put(MyDBHelper.COLUMN_DES, "测试数据");
		    		//long rowid = db.insert(MyDBHelper.DB_TABLE, null, values);//返回行号,失败返回-1
	    			//法2:此方法的需要为所有的字段初始化数据
		    		String sql = "insert into " + MyDBHelper.DB_TABLE + " values (null, ?, ?, ?)";//用null,因为表中第一个参数是INTEGER自增
	    			db.execSQL(sql, new String[]{"name" + i, "测试数据", ""});
	    		}
	    	
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				if(db != null){
					db.close();
				}
			}
	}
	

Android Sqlite数据库的升级(1)

数据库升级下载地址






Android Studio SQLite数据库应用(二) Android Studio SQLite数据库应用(二)版本 Android Studio 1.5.1事务处理 升级数据库的最佳写法哈哈刚刚写完 SQLite数据库应用(一),接着把后面的写完吧;事务处理所谓事务处理就是,保证在完成一系列操作的时候,要么全部完成要么一个都完成不了。我还用之前的代码作为案例;现在我要把Book表中的数据都删掉,让后写入新的数据;如果在这个操作过程中出现了异常,那么 阅读详情

相关推荐

2.1 SQLite数据库的创建和升级

点此进入:从零快速构建APP系列目录导图点此进入:UI编程系列目录导图点此进入:四大组件系列目录导图点此进入:数据网络和线程系列目录导图本节例程下载地址:WillFlowDatabast一、SQLite简介**SQLite 是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百 K 的内存就足够了,因而特别适合在移动设备上使用。**SQLite 不仅支持标准的 SQL 语法,还

WillFlow的博客 1533

git克隆报错

fatal: early EOF fatal: read error: Invalid argument fatal: index-pack failed 解决方法: 加–depth 1参数 "C:\Program Files\Git\bin\git.exe" clone -v --recurse-submodules --depth 1 --no-single-branch --progress

博客 1413

SQL的Create、Drop、Alter简单练习

新建用户 事先创建好一个数据库。 新建好的Wang用户 定义模式 Create SCHEMA AUTHORIZATION 如果没有指定,那么隐含为 要创建模式,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授予的CREATE SCHEMA 权限。一般情况下,自己操作自己的数据库的话,是有这个权限的 为用户有Wang定义一个学生-课程模式S-T Create Schema "S-T" Authorization Wang --注意在事先创建新用户的数据库下 该语句没有指定 模式民,所以模式名隐含为用户名Wang CREATE SCHEMA AUTHORIZAT

Hive基本命令整理

创建表: hive&gt; CREATE TABLE pokes (foo INT, bar STRING); Creates a table called pokes with two columns, the first being an integer and the other a string 创建一个新表,结构与其他一样 hive&gt; create table new_...

java 学习 701

基于STM32的多模态智能风扇控制系统设计与实现

本文详细介绍了基于STM32单片机的多模态智能风扇控制系统的设计与实现。系统集成了红外遥控、蓝牙手机控制及人体感应等多模态交互方式,通过PWM技术实现无级调速,并设计了安全优先的控制逻辑。文章从硬件选型、核心原理、软件编程到系统调试,提供了完整的实战指南,适合嵌入式开发爱好者学习与实践。

weixin_28285943的博客 238

Matlab实战:用DQN算法让机器人学会自主避障(附完整代码)

本文详细介绍了如何使用Matlab实现DQN(深度Q网络)算法,使机器人在复杂环境中学会自主避障。通过环境建模、网络架构设计、奖励函数优化及实战调试,提供了完整的代码实现和训练策略,帮助开发者快速应用于机器人路径规划项目。

t8u9v0w1x的博客 232

Python小记 异常处理

文章目录处理异常 try....except..抛出异常 raise assertraiseassert自定义异常内置异常单元测试 testmod() 处理异常 try…except… try…except…[else…[finally…]] 可以没有 else... 、 finally try: # do something except Except01 as e1: # do something except Exception2 as e2: # do something excep

薛定谔的壳的博客 359

第1部分 基础算法(提高篇)--第2章 二分与三分1439:【SCOI2010】传送带

1439:【SCOI2010】传送带 时间限制: 2000 ms 内存限制: 65536 KB 提交数: 372 通过数: 212 【题目描述】 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间。 【输入】 输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By 第二行是4个整

zqhf123的博客 838

AndroidStudio-3.2.1(十四)SQLite基本操作

本篇介绍android数据库SQLite的增删改查基本操作及使用Navicat查看数据库。 android设备上的程序一般使用SQLite作为存储数据库,android sdk应封装了对sqlite的常用操作。SQLite是一个单机版数据库,类似于access,存储文件是.db文件。 增删改查 1、先实现一个数据库操作类,继承自SQLiteOpenHelper。有3个主要方法: 构造函数: ...

SHENCHEN1987的博客 1313

基于STM32 FOC下桥三电阻采样方式的电机相电流重构方法

如何提高三电阻采样的调制率

wanrenqi的博客 9193

万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用

ARINC 653 在综合模块化航空电子设备(IMA)的发展进程中扮演着极为关键的角色。从行业应用的实际情况来看,空客 A380 和波音 787 等先进飞机的航电系统套件充分体现了行业对 IMA 的高度重视和积极投入。在 IMA 架构下,核心软件具备强大的能力,能够支持多个航空电子应用程序的同时运行。这些应用程序可以并行开发,并高效地部署在同一个计算平台上,极大地提高了开发效率和系统集成度。ARINC 653 的出现为航空电子行业创造了一个充满活力和竞争力的商业环境。

2956

android数据库降级_Android SQLite (二.数据库创建,升级及降级)

上篇文章简介和常用语法介绍了SQLite数据库的基本信息和一些常用的语法操作,本篇文章主要介绍Android开发过程中SQLite数据库的创建使用和常见问题处理。一.SQLiteOpenHelper介绍对于Android平台来说,我们可以使用系统提供的API轻松实现对SQLite数据库的操作Android提供SQLiteOpenHelper类以便我们创建操作数据库。通常情况下我们会新建一个SQLi...

weixin_32452127的博客 533

LangChain .NET:C#开发者构建AI应用的RAG框架与实战指南

大语言模型(LLM)作为当前人工智能的核心技术,通过深度学习海量文本数据,掌握了强大的语言理解和生成能力。其原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系,从而实现对复杂语义的建模。这一技术价值在于能够将非结构化的自然语言转化为可计算、可推理的表示,为各类智能应用提供认知基础。在实际工程实践中,LLM常被应用于构建检索增强生成(RAG)系统和AI智能体(Agent)。RAG通过结合外部知识库检索与LLM生成,有效提升了问答的准确性和事实性,是构建企业知识库、智能客服等场景的关键技术。

weixin_42538175的博客 705

Android SQLite (二.数据库创建,升级及降级)

一.SQLite简介和常用语法 二.数据库创建,升级及降级 上篇文章简介和常用语法介绍了SQLite数据库的基本信息和一些常用的语法操作,本篇文章主要介绍Android开发过程中SQLite数据库的创建使用和常见问题处理。 一.SQLiteOpenHelper介绍 对于Android平台来说,我们可以使用系统提供的API轻松实现对SQLite数据库的操作 ...

limushan的博客 362

如何在SpringBoot中实现AI 流式输出?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1479

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android——SQLite数据库(二)升级数据库、增、删、改、查、事务

xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height=...

weixin_30845171的博客 93

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android:使用Room数据库报错[SQLITE_ERROR]SQL error or missing database(no such table)的产生原因及解决办法

在Android开发中,Room是我们常用的持久化库,但我们平时在使用它时,可能或多或少会遇到 [SQLITE_ERROR]no such table)的报错。以下是我总结的可能产生原因及解决办法。

aldkdb的博客 1594

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

安卓数据库SQLite

安卓数据库SQLite

似霰的博客 7984

android sqlite数据库升级

随着我们系统的升级,数据库一般也要跟着一起变化。Android 中的 SQLite数据库根据数据库版本号来判断是否进行了升级。当数据库版本号发生变化后,Android 系统会调用 SQLiteOpenHelper 的 ouUpgrade 函数,然后我们在该函数中对版本号进行判断,再根据版本号执行对应的升级数据库的 SQL 语句。 数据库升级主要是调用SQLiteOpenHelper 中的onU...

qq_36699930的博客 1373

Android Studio中Sqlite数据库的创建及升级

今天学习了如何建立Sqlite数据库 MainActivity package com.example.a92133.databasedemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivi...

weixin_44754752的博客 1623

Android SQLite数据库版本升级原理解析

Android SQLite数据库版本升级原理解析Android使用SQLite数据库保存数据,那数据库版本升级是怎么回事呢,请看下面的详细分析。

JunkChen 1349

Android操作sqlite数据库

sqlite

ywanju的博客 1747

Android数据库Sqlite的基本用法及升级策略

SQLite简介SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口,同样比起 Mys...

小马快跑的博客 6302

Android SQLite数据库版本升级(分逐级升级和跨版本升级)

参考:Android Sqlite数据库跨版本升级 保存之前数据 本文说的数据库升级是基于Android原生APISQLiteOpenHelper实现的逻辑,不涉及第三方库。其实如果使用官方推荐的Room库的话,可以利用RoomDatabase.Builder.addMigrations()方法配合Migration类灵活的设置迁移(升级)路径,根本不需要自己来实现其中的逻辑。 首先,关于SQLiteOpenHelper类我们需要知道几点:onCreate()方法只在第一次创建数据库的时候调用,onUpgr

Jay Ng的博客 3643

Android Sqlite数据库的升级(一)

Android Sqlite数据库的升级 参考博客:http://blog.sina.com.cn/s/blog_6400e5c50101mgu4.html package com.db.demo; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.dat

安卓鸟的专栏 1306
上一篇: Android EventBus的使用
下一篇: 安卓自定义对话框(位置和大小)
安卓鸟
博客等级 码龄15年 14粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值