美文网首页
SQlite升级

SQlite升级

作者: 秋缘未了 | 来源:发表于2018-05-23 10:58 被阅读26次

public class MyHelper extends SQLiteOpenHelper {
    public static final String CREATE_BOOK="create table book("
            +"id integer primary key autoincrement,"
            +"author text,"
            +"price real,"
            +"pages integer,"
            +"name text)";
    private Context mContext;
    public MyDataBaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version)
    {
        super(context,name,factory,version);
        mcontext=context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch (oldVersion) {
            case 1:
                db.execSQL(CREATE_CATEGORY);
            case 2:
                db.execSQL("alter table Book add column category_id integer");
                default:

        }

    }
}

升级数据库方式一:

onUpgrade()方法是用于对数据库进行升级的。
假如现在要在数据库中添加一个STUDENT的表,如何在上述程序上修改呢?
直接在onCreate()方法中添加创建语句是不行的,因为数据库已经存在,OnCreate()方法不会被运行了。那最基础的办法是:
传入一个高一点的版本号,
在onUpgrade运行删除数据库的操作,在点击按钮就可以运行OnCreate()方法了。
传入一个高一点的版本号,就可以让onUpgrade()方法执行

public class MyDataBaseHelper extends SQLiteOpenHelper {
    public static final String CREATE_BOOK="create table book("
            +"id integer primary key autoincrement,"
            +"author text,"
            +"price real,"
            +"pages integer,"
            +"name text,"
            +"category_id integer)";

    public static final String CREATE_STUDENT="create table Student("
            +"id integer primary key autoincrement,"
            +"name text,"
            +"age integer)";
private Context mContext;
    public MyDataBaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version)
    {
        super(context,name,factory,version);
        mContext=context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
        db.execSQL(CREATE_STUDENT);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      db.execSQL("drop table if exists Book");
      db.execSQL("drop table if exists Student");
      onCreate(db);
        }
    }
}

优点:写法简单,缺点会删除历史数据,造成隐患

升级数据库方式二:

增加数据库版本号(为每一个版本号赋予它各自的更改的内容),在onUpgrade()方法中对当前数据库的版本号进行判断,再执行相应的改变就可以了。

public class MyDataBaseHelper extends SQLiteOpenHelper {
    public static final String CREATE_BOOK="create table book("
            +"id integer primary key autoincrement,"
            +"author text,"
            +"price real,"
            +"pages integer,"
            +"name text,"
            +"category_id integer)";

    public static final String CREATE_STUDENT="create table Student("
            +"id integer primary key autoincrement,"
            +"name text,"
            +"age integer)";



    public MyDataBaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version)
    {
        super(context,name,factory,version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch (oldVersion) {
            case 1:
                db.execSQL(CREATE_STUDENT);
            case 2:
                db.execSQL("alter table Book add column category_id integer");
                default:

        }

    }
}

SQLite数据库只允许增加表字段(alter table my_table add field_name field_type;),不允许修改和删除表字段。

相关文章

  • SQlite升级

    升级数据库方式一: onUpgrade()方法是用于对数据库进行升级的。假如现在要在数据库中添加一个STUDENT...

  • iOS SQLite迭代

    *** 前提:sqlite较复杂的情况是沙盒中已经存在了sqlite文件,再进行sqlite升级,下文按照此种情况...

  • centos7 升级sqlite3

    升级sqlite3官网 点击[https://www.sqlite.org/download.html]1.下载源...

  • Sqlite升级时向已有表中增加字段

    Sqlite升级时向已有表中增加字段 Sqlite数据库升级时,我们经常会遇到给已有表中增加字段的操作。一般来说,...

  • Android - base - SQLite

    Android 自带的SQLite数据库 大纲 SqLite 数据类型 核心类 创建和升级数据库 CRUD操作 #...

  • SQLite的升级

    sqliteDataBase的升级其实只涉及到创建数据库的那个类,下面给出一个类的代码做范例然后做简单讲解 sql...

  • Android 数据库

    sqlite详解 sqlite升级,增加字段的语句 数据库框架对比和源码分析 数据库的优化 数据库数据迁移问题

  • 关于app数据库升级时的SQLite数据迁移问题

    关于app数据库升级时的SQLite数据迁移问题,下面几篇文章介绍得较为具体: 1、App版本更新时对SQLite...

  • SQLite数据库存储--创建、升级数据库

    SQLite数据库存储--创建、升级数据库 SQLite是一款轻量级的关系型数据库 创建数据库 Android为了...

  • Sqlite判断数据库表是否有某个字段

    前言:Sqlite在数据库升级时需要判断某个字段是否存在,不存在插入(FMDB有自己的判断方法,只说明Sqlite...

网友评论

      本文标题:SQlite升级

      本文链接:https://www.haomeiwen.com/subject/ulzljftx.html