思维:

1.当然,它是基于SQLiteOpenHelper.onCreate(第一个呼叫建立)、onUpdate(当所谓的升级计划)

2.用"脚本"(脚本制作详细方法问度娘)做数据库升级,文件名称标识相应版本号,java中依据“上一版本号、当前版本号”选择运行的脚本。

升级时,改动DB_VERSION(当前版本号)就可以。

DBManager.java:

package com.example.test;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

public class DBManager extends SQLiteOpenHelper {

private final static String DBNAME = "mydata.db";

private final static int DB_VERSION = 1;

private static DBManager instance;

public DBManager(Context context) {

// TODO Auto-generated constructor stub

super(context, DBNAME, null, DB_VERSION);

}

public static DBManager getThis() {

if (instance == null)

instance = new DBManager(MainActivity.getThis());

return instance;

}

@Override

public void onCreate(SQLiteDatabase db) {

// TODO Auto-generated method stub

initDb(db, 0, DB_VERSION);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO Auto-generated method stub

initDb(db, oldVersion, newVersion);

}

// 初始化db,运行脚本

// 注:1>运行"(oldV,newV]"(全新安装时,oldV=0)间的脚本

// 2>缺失的脚本会直接跳过

private void initDb(SQLiteDatabase db, int oldVersion, int newVersion) {

for (int i = oldVersion + 1; i <= newVersion; i++)

execDBScript(db, "db/update" + i + ".sql");

}

// 运行脚本

private void execDBScript(SQLiteDatabase db, String assetName) {

try {

InputStream is = MainActivity.getThis().getAssets().open(assetName);

String stats = read(is);

execSqls(db, stats);

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

// 批运行,用";"隔开

private void execSqls(SQLiteDatabase db, String stats) {

// onCreate/onUpdate内部已带事务,多层嵌套无影响(最外层起作用)

db.beginTransaction();

String[] sqls = stats.split(";");

for (int i = 0; i < sqls.length; i++) {

String sqlStatement = sqls[i].trim();

// TODO You may want to parse out comments here

if (sqlStatement.length() > 0) {

// 捕获错误,防止运行drop时 直接越过

try {

db.execSQL(sqlStatement + ";");

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

}

db.setTransactionSuccessful();

db.endTransaction();

}

public static String read(InputStream instream) throws IOException {

ByteArrayOutputStream bos = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len = 0;

while ((len = instream.read(buffer)) != -1) {

bos.write(buffer, 0, len);

}

String ret = new String(bos.toByteArray());

return ret;

}

}

db脚本:

java监控数据库的增量_【安德鲁斯】基于脚本的数据库quot;增量更新quot;,如果不改变,每次更新java代码、!...相关推荐

  1. mysql数据库需求分析工具_一份全面的“数据库设计需求分析”是怎样的?

    原标题:一份全面的"数据库设计需求分析"是怎样的? 本文笔者将与大家分析数据库外部设计需求.结构设计需求.运用设计需求以及安全保密设计需求. 数据库设计需求 1. 需求概述 建立完 ...

  2. mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换

    一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...

  3. mysql在手游中的作用_数据库虚拟化技术_手游业务MySQL数据库虚拟化漫谈 | By 肖力-云栖社区...

    作者简介 肖力, 资深运维专家,拥有15年运维经验,就职于金山西山居,担任系统运维经理,曾就职于盛大游戏,在运维圈有极大的影响力.国内最顶尖的KVM专家之一,从2009年开始研究KVM技术,是国内较早 ...

  4. 阿里云mysql创建数据库服务器地址_阿里云服务器创建数据库操作流程

    阿里云服务器创建数据库操作流程,如何上传数据库阿里云. 在阿里云ecs云服务器上部署数据库后,在平常的操作中可能会遇到些问题,可以先做个大致的了解: 如果您想看更多的在ecs上的数据库的相关操作,请前 ...

  5. mysql数据库字符集设置_查看和设置MySQL数据库字符集

    查看和设置MySQL数据库字符集作者:scorpio 2008-01-21 10:05:17 标签: 杂谈 Liunx下修改MySQL字符集:1.查找MySQL的cnf文件的位置find / -ina ...

  6. android 数据库模糊查询语句_单表千万行数据库:LIKE 搜索优化手记

    我们经常在数据库中使用 LIKE 操作符来完成对数据的模糊搜索,LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. 如果需要查找客户表中所有姓氏是"张"的数据,可以使用 ...

  7. mysql外键约束脚本_使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)...

    在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...

  8. sql 获取数据库字段信息_使用DBATools获取SQL数据库详细信息

    sql 获取数据库字段信息 In the series of articles on DBATools, (see TOC at the bottom) we are exploring useful ...

  9. mysql数据库设计工具_四种优秀的数据库设计工具

    [51CTO.com快译]众所周知,良好的数据库设计能够大幅减少后期的运维工作,同时也能最大程度地减少软件项目出错的可能.由于我们所面临的真实项目需求往往五花八门,因此需要找到合适的设计工具,来实现事 ...

最新文章

  1. dataGridView 数据绑定
  2. mysql 视图 临时表模式
  3. AlarmManager与PendingIntent的联合使用(二)
  4. luogu 5471 [NOI2019]弹跳 KDtree + Dijkstra
  5. TF之LiR:基于tensorflow实现机器学习之线性回归算法
  6. android 修改toolbar菜单item的icon图标
  7. springBoot 项目 jar/war打包 并运行
  8. 解决安装ROS 时rosdep update 问题(time out)
  9. 为什么jdk的CLASSPATH环境变量需要设置rt.jar 和 tools.jar
  10. oracle的连接字符串
  11. WordPress Gravatar国内加载缓慢解决办法
  12. mongodb golang 批量更新_Mongodb读取数据缓慢问题-Sparkamp;Mongodb
  13. javascript 源代码加密保护
  14. python+seleniun+pyqt5 易班经验刷取开发记录
  15. 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业 (1)
  16. python实现多线程输出123123
  17. 02组团队项目-Alpha冲刺-3/6
  18. 模型保存文件.npy
  19. python pip本身的安装路径
  20. PMP 质量保证与质量控制的区别

热门文章

  1. 深度学习(一)——MP神经元模型, BP算法, 神经元激活函数, Dropout
  2. Servlet实现Session
  3. [leetcode]Subsets @ Python
  4. 我的一个学生在运维工作中写的自动日志清理脚本程序
  5. 5.4. Interaction Between Devices and Kernel 设备与内核的交互
  6. Catalyst 6509交换机配置方案
  7. 二进制状态压缩相关操作
  8. 设计模式(十)------23种设计模式(3):抽象工厂模式
  9. 为pc编译配置安装当前最新的内核
  10. 《Spring》(六)---- Bean的scope