之前做项目遇到过这个问题,建好一张SQLite表并运行成功后,再往表里添加新的字段,程序就会出现“很抱歉程序出现异常,即将退出”并闪退。想着这个错误再明显不过了,一看日志打印的错误为E/SQLiteLog: (1) no such column,即在数据库找不到这个新增的字段。一百度,发现并没有好办法,只能卸载重装,这也太坑了吧。今天偶然看书竟然找到了解决办法,记录一下。
1.创建数据库
创建数据库的程序相信大家并不陌生,只要创建一个类继承SQLiteOpenHelper抽象类,并重写onCreate()和onUpgrade()方法就行。
SQLiteOpenHelper有三个构造方法可供重写。一般重写SQLiteOpenHelper(Context context,String name,CursorFactory factory, int version)即可,第一个参数传入Context,第二个参数是数据库名,第三个参数一般传入null,第四个参数表示当前数据库的版本号,可用于对数据库进行升级操作。
下面我们简单的创建一个名为BookStore.db的数据库,并新建一张名为Book的表,表中有id(主键),书名,作者,页数等列,代码如下所示:
public class DBOpenHelper extends SQLiteOpenHelper {
private Context context;
public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists Book(_id integer primary key autoincrement,name text,author text,page integer)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
使用方法也很简单,只用在布局文件中新增一个按钮,用于创建数据库。MainActivity中的代码如下:
public class MainActivity extends AppCompatActivity {