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