Sqlite数据库创建、删除、降级笔记

  (1)、在创建sqlite数据库时需要注意oncreate()方法只有在第一次创建数据库时候运行。当数据库删除后也会执行,sqlite不支持数据库删除,但可以删除相应的文件,即删了数据库。当我们再次配置文件时候就会执行oncreate()了。

  (2)、onUpgrade()只有在版本号发生改变(增加)时候才会执行,很多时候我们直接在onUpgrade()里添加我们想插入的表或者列,但会报错,那是因为你之前版本onUpgrade里的语句会再次执行,若之前插入了表、或者行,此时会再执行一次,因此每次跟新数据库的时候就需要注释或者删掉以前的所有的语句(为了数据库的回复等,最好保存之前的操作)

 public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
46         /**
47          * 执行数据库的降级操作
48          * 1、只有新版本比旧版本低的时候才会执行
49          * 2、如果不执行降级操作,会抛出异常
50          */
51         Log.i("PERSON", "***数据库降级了***:" + DB_VERSION);
52         super.onDowngrade(db, oldVersion, newVersion);
53     }

  (3)sqiite支持列的插入,但不支持删除,因此,不清楚如何删除列,我一般保存数据后删除表然后重建。

  (4)SQLiteOpenHelper 对象创建的时候,数据库还未创建,只有当SQLiteOpenHelper调用getWritableDatabase()时候才会创建数据库。

下面是以2种方式来创建数据库,一种是创建类继承SQLiteOpenHelper,实现单例模式,然后调用getWritableDatabase()来创建数据库;一种是自定义一个datebace类,内部封装一个单例模式的SQLiteOpenHelper ,然后把SQLitehelper和SQLiteDatebace作为类对象组合的方式操作数据库。第二种相当于是封装了SQLiteDatebac,但是还不够完善为只写了open、close、必须还得写增删改查等功能,完成方法同close,都是借用内部的SQLiteDatebace实现,为了简单就不介绍了。

第一种:

package com.example.lammy.datebacedemo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by Lammy on 2016/10/17.
 */
public class MyDatebaceHelper  extends SQLiteOpenHelper{

    private  static  String DATEBACE_NAME = "friends";
    private static  int VERSION = 1;
    static final String DATABASE_CREATE =
            "create table contacts( _id integer primary key autoincrement, " +
                    "name text not null, email text not null);";
    public  static MyDatebaceHelper myDatebaceHelper;

    private MyDatebaceHelper(Context context) {

        super(context, DATEBACE_NAME, null, VERSION);
        System.out.println("创建数据库");

    }
    public static MyDatebaceHelper getDataHelper(Context context)
    {
        if (myDatebaceHelper == null) {
            synchronized (MyDatebaceHelper.class) {
                if (myDatebaceHelper == null) {
                    myDatebaceHelper = new MyDatebaceHelper(context);
                }
            }
        }
        return  myDatebaceHelper;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        System.out.println("创建数据库2");
        db.execSQL(DATABASE_CREATE);
    }

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

    }



}

  

 

第二种:

package com.example.lammy.datebacedemo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by Lammy on 2016/10/17.
 */
public class MyDateBace {
    private  static  String DATEBACE_NAME = "friends";
    private static  int VERSION = 1;
    static final String DATABASE_CREATE =
            "create table contacts( _id integer primary key autoincrement, " +
                    "name text not null, email text not null);";
    public  static MydateHelper myDatebaceHelper;
    public  static SQLiteDatabase sqLiteDatabase;

    private  Context context;
    public MyDateBace( Context context)
    {
        this.context = context;
        myDatebaceHelper = MydateHelper.getDataHelper(context);
    }


    public  void open()
    {
        sqLiteDatabase = myDatebaceHelper.getWritableDatabase();
    }
    public  void close()
    {
        sqLiteDatabase.close();
    }

    static class MydateHelper extends SQLiteOpenHelper{

        private MydateHelper(Context context) {
            super(context, DATEBACE_NAME, null, VERSION);
            System.out.println("创建数据库");

        }

        public static   MydateHelper getDataHelper(Context context) {
            if (myDatebaceHelper == null) {
                synchronized (MyDatebaceHelper.class) {
                    if (myDatebaceHelper == null) {
                        myDatebaceHelper = new MydateHelper(context);
                    }
                }
            }
            return myDatebaceHelper;
        }

        @Override
        public void onCreate(SQLiteDatabase db) {

            System.out.println("创建数据库2");
            db.execSQL(DATABASE_CREATE);
        }

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

        }

    }


}

  

posted @ 2015-07-18 22:39  Lammy  阅读(1017)  评论(0编辑  收藏  举报