Android引入外部数据库遇到的坑

当你在原有的SQLite数据库中利用文件流的形式导入外部数据库时,会覆盖原有的表结构,而可能出现一些莫名其妙的bug。

例如:

public class DBHelper extends SQLiteOpenHelper {


private static final int VERSION = 1;
public static final String DB_NAME = "demo.db";
public DBHelper(Context context) {
super(context, DB_NAME, null, VERSION);

}

//创建数据库
@Override
public void onCreate(SQLiteDatabase db) {
createLeaveMessage(db);

}

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

public void createLeaveMessage(SQLiteDatabase db){
String sql="create table LeaveMessage(guid text,content text,uid text,state int,Answer text,upTime text)";
     db.execSQL(sql);
}

}

以上这个当你首次 getWritableDatabase() 时会创建名为demo.db 的数据库以及库内有表 LeaveMessage ,而当你用外部数据库以文件流的方式写入此数据库后,得到的结果是数据库里面只有外部数据库里面的表,而原本的 LeaveMessage 表不复存在。当你再次激活这个数据库帮助类以写入数据到 LeaveMessage 表里,这个表才会重新创建,在此之前如果你查询被覆盖后的 LeaveMessage 里有多少条数据时,程序可能不会报找不到表的错误,而且可能能读取到错误的查询结果。


所以,如果用文件流方式引入数据库的,请新建一个库,以此来作为其容器,这样才能保证原有数据库不出问题。

你可能感兴趣的:(Android引入外部数据库遇到的坑)