(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) { } } }