ǰλã >> SQL >> 我的android ??SQLiteOpenHelper对数?进?版本管理
  ϸ

我的android ??SQLiteOpenHelper对数?进?版本管理

ȶȣ2407   ʱ䣺2016-05-05 11:54:13.0
我的android ?3?-SQLiteOpenHelper对数?进?版本管理

我的android ?3?-SQLiteOpenHelper对数?进?版本管理

 

我们在编写数?应用?时,?要?虑这样的问题:因为我们?发的??会安装在很?用户的手机上,?果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建出应用使用到的数?表结构及添加?些初始化记录,另外在?升级的时候,也需要?数据表结构进行更新?那么,我们如何才能实现在用户初次使用或升级?时自动在用户的手机上创建出应用需要的数据库表?总不能?我们在每?要安装??的手机上通过手工方式创建数据库表吧?因为这??求是每个数据库应用都要面临的,所以在Android系统,为我们提供了一?为SQLiteOpenHelper的抽象类,必须继承它才能使用,它??过对数?版本进?管理来实现前面提出的?求??/span>

为了实现对数?版本进?管理,SQLiteOpenHelper类提供了两个重?的方法,分别是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),前者用于初次使用软件时生成数据库表,后者用于升级软件时更新数据库表结构。当调用SQLiteOpenHelper的getWritableDatabase()或?getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一??,接?调用onCreate()方法,onCreate()方法在初次生成数?时才会?调用,在onCreate()方法?span style="color: red;" class="Apple-style-span">?生成数据库表结构及添加一些应用使用到的初始化数据。onUpgrade()方法在数?的版?生变化时会?调用,一??升级时才?改变版本?/span>,?数?的版?由程序员控制的,假?数据库现在的版本?,由于业务的变更,修改了数据库表结构,这时?就?要升级软件,升级?时希望更新用户手机里的数?表结构,为了实现这一?,可以把原来的数?版本设置?(有同学问设置?行不行?当然?,?果你愿意,??100也?),并且在onUpgrade()方法里面实现表结构的更新。当?的版?级?数比较?,这时在onUpgrade()方法里面?根据原版号和?版本号进行判?然后作出相应的表结构及数?新??/span>

getWritableDatabase()和getReadableDatabase()方法都可以获取一?于操作数?的SQLiteDatabase实例。但getWritableDatabase()方法以?写方式打?数据库,?旦数?的?盘空间满了,数据库就?读?不能写,?若使用的是getWritableDatabase() 方法就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打?失败,当打开失败后会继续尝试以只读方式打?数据库??/span>

 

public class DatabaseHelper extends SQLiteOpenHelper {

    //类没有实例化,?能用作父类构造器的参?/span>,必须声明为静?/span>

         private static final String name = "itcast";//数据库名?/span>

         private static final int version = 1; //数据库版?/span>

         publicDatabaseHelper(Context context) {

//???/span>CursorFactory指定在执行查询时获得??标实例的工厂?/span>,设置?/span>null,代表使用系统默?的工厂类

                super(context, name, null, version);

         }

        @Override public void onCreate(SQLiteDatabase db) {

              db.execSQL("CREATETABLE IF NOT EXISTS person (personidinteger primary key autoincrement,name varchar(20),age INTEGER)");  

         }

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

               db.execSQL("DROPTABLE IF EXISTS person");

               onCreate(db);

         }

}

上面onUpgrade()方法在数?版本每?发生变化时都会把用户手机上的数据库表删除,然后再重新创建。一?实际项目?不能这样做的,??做法?更新数据库表结构时,还?考虑用户存放于数??数据不会丢失?/span>

 

下载视?代码