sqlite自动更新数据库

写一个类继承自  SQLiteOpenHelper

系统会自动添加构造方法、 onCreate方法、onUpgrade方法

当数据库里面数据或者表结构有所改动时,咱们需要升级数据库

这个时候,版本加1.在update里面做相应修改。

需要注意的是,如果需要测试update,每次开始测试,version 值增大,如果和上次的相同,就不会促发update方法了

下面贴上代码

先是原来的表结构,对应的代码

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class DataHelp extends SQLiteOpenHelper {

public static String name = "sxjj.db3";

public static int  version = 1;

public DataHelp(Context context, String name, CursorFactory factory,

int version) {

super(context, name, null, version);

}

public void onCreate(SQLiteDatabase db) {

String sql_tansInfo = "create table if not exists transInfo(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,  type int)";

db.execSQL(sql_tansInfo);

}

public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

}

}

现在的表结构,对应的代码

import com.ylj.sxbmzx.view.QueryTransInfoActivity;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.widget.Toast;

public class DataHelp extends SQLiteOpenHelper {

public static String name = "sxjj.db3";

public static int  version =3;

Context context=null;

public DataHelp(Context context, String name, CursorFactory factory,

int version) {

super(context, name, null, version);

this.context=context;

}

public void onCreate(SQLiteDatabase db) {

// String sql_tansInfo = "create table if not exists transInfo(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,type int,address text,marker text )";

String sql_tansInfo = "create table if not exists transInfo(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,type int,address text,marker text )";

db.execSQL(sql_tansInfo);

}

public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {

//第一次运行,版本加1的时候,触发这个方法了,下一次就不触发了

// String sql_tansInfo = "create table if not exists transInfo1(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,marker text,  type int,address text)";

// db.execSQL(sql_tansInfo);

// String sql_tansInfo_insert = "INSERT INTO transInfo1(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,marker text,  type int,address text)";

// String sql_delete="delete from transInfo";

// db.execSQL(sql_delete);

// String sql="ALTER TABLE transInfo ADD COLUMN address text;";

// db.execSQL(sql);

//

// String sql2="ALTER TABLE transInfo ADD COLUMN marker text;";

// db.execSQL(sql2);

Toast.makeText(context, "更新---------", 1).show();

//经测算证明alter table 这一句真的执行了,查出来的address 为null

//现在不知道alter table 之后,原来的数据是否还保留着,经测试还保留者,但是新的字段是空的,没数据

//改程序后,查的时候,必然要把新的字段也查出来,所以,重新插入数据吧

//现在的表,其实是要添加两列,那我得执行两次插入列,也可以把原来的表删除,重新建表

//添加两列这种,以后版本增加,也不合适

String sql_create_tansInfo = "create table if not exists transInfo_new(id integer primary key autoincrement, name nvarchar(50), tel nvarchar(20), content text,type int,address text,marker text )";

//不用 insert 了

db.execSQL(sql_create_tansInfo);

String sql_drop_oldTable="drop table transInfo";

db.execSQL(sql_drop_oldTable);

String sql_rename="ALTER TABLE  transInfo_new RENAME TO transInfo";

db.execSQL(sql_rename);

}

}

sqlite自动更新数据库

时间: 2024-10-14 09:49:10

sqlite自动更新数据库的相关文章

EF修改model自动更新数据库

最近用MVC+EF学习时遇到修改model后而数据库没更新报错,就在网上找关于数据迁移自动更新数据库的,折腾了大半天终于弄了出来 第一步:在程序包管理器控制台里: Enable-Migrations -ProjectName EF所在的项目名称 第二步:运行后会在字段生成Migrations文件夹,Migrations->Configuration.cs 类里把AutomaticMigrationsEnabled改为true(即设为model有改动自动更新数据库) 如有删除字段则要加 Autom

Code First 下自动更新数据库结构(Automatic Migrations)

示例 Web.config <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramew

EF-使用迁移技术让程序自动更新数据库表结构

承接上一篇文章:关于类库中EntityFramework之CodeFirst(代码优先)的操作浅析 本篇讲述的是怎么使用迁移技术让程序自动通过ORM框架将模型实体类结构映射到现有数据库,并新增或修改与之对应的表结构. 无论承不承认,都要使用到visual studio的"程序包管理器控制台"执行相关的命令. 1.使用"程序包管理器控制台" 工具>NuGet程序包管理器>程序包管理器控制台 这货的界面是这样子的: 选中默认项目为DAL,因为我们在DAL项目

MVC Code First 当实体类发生变化时,如何自动更新数据库表

下面做一个例子,Category是用户新建的一个实体类,然后添加一个字段,然后让数据库中的Category表也添加一个字段 1.Category.cs using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; namespace BlogAppDAL.Entities { public clas

设置EntityFramework 在开发时自动更新数据库

1. NuGet 下载EntityFramework. 2. 定义Context 和 打开NuGet 命令 执行 Enable-Migrations , Libaray.DAL.Migrations.Configuration 要在执行命令后自动产生. using Libaray.Models.Entities; using Libaray.Models.Maps; using System; using System.Collections.Generic; using System.Data

C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库

using FtpLib; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading; using

hibernate 自动生成数据库表

只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表 <property name="hibernate.hbm2ddl.auto">update</property> update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失.

Hibernate自动生成数据库表

在hibernate.cfg.xml中添加: 引用 <properties> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> value的值可选项如下: 引用 validate  加载hibernate时,验证创建数据库表结构 create  每次加载hibernate,重新创建数据库表结构. create-drop  加载hibern

Code First Migrations更新数据库结构的具体步骤

我对 CodeFirst 的理解,与之对应的有 ModelFirst与 DatabaseFirst ,三者各有千秋,依项目实际情况自行选择. 1.开发过程中先行设计数据库并依此在项目中生成 *.dbml 或是 *.edmx 文件的,就是DatabaseFirst: 2.开发时先建立空的 *.edmx 文件,由此文件生成数据库的,就是ModelFirst: 3.使用 System.Data.Entity. DbContext 与 System.Data.Entity. DbSet构建数据模型,没有