zoukankan      html  css  js  c++  java
  • 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) {
    
            }
    
        }
    
    
    }
    

      

  • 相关阅读:
    如何实现文字两端对齐?
    三目运算符的复杂运算(条件嵌套判断)
    微信小程序实现图片上传,预览,删除
    微信小程序滚动条返回顶部
    vue+axios下载文件的实现
    java script 运算符
    关于placeholder提示内容出现在textarea底部问题
    js基础知识
    java script 字符串
    java script 函数
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/4657839.html
Copyright © 2011-2022 走看看