android sqlite no such column,Android:no such column之升级数据库

当在Android应用中向SQLite数据库已存在的表添加新字段时,会出现'no such column'错误。解决方法是在`onUpgrade()`方法中删除旧表并重新创建。在`DBOpenHelper`中增加新字段的创建语句,并将数据库版本号加1,确保`onUpgrade()`被调用,从而避免手动卸载重装应用。
摘要由CSDN通过智能技术生成

之前做项目遇到过这个问题,建好一张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 {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值