关于#SQLite#的问题,如何解决?


public class DrinkActivity extends AppCompatActivity {
   public  static  final String EXTRA_DRINKID="drinkId";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drink);

        int drinkId=getIntent().getExtras().getInt(EXTRA_DRINKID);
//        Drink drink =Drink.drinks[drinkId];
//
//        TextView name=(TextView)findViewById(R.id.name);
//        name.setText(drink.getName());
//
//        TextView descriptipn=(TextView)findViewById(R.id.description);
//        descriptipn.setText(drink.getDescription());
//
//        ImageView photo =(ImageView)findViewById(R.id.photo);
//        photo.setImageResource(drink.getImageResourceId());
//        photo.setContentDescription(drink.getName());
        SQLiteOpenHelper starbuzzDatabaseHelper=new StarbuzzDatabaseHelper(this);

        try(SQLiteDatabase db=starbuzzDatabaseHelper.getReadableDatabase()) {

            Cursor cursor=db.query("DRINK",
                   new String[]{"NAME","DESCRIPTION","IMAGE_RESOURCE_ID","FAVORITE"},
                    "_id=?",
                    new String[]{Integer.toString(drinkId)},
                    null,null,null);

            if(cursor.moveToFirst()){
                String nameText=cursor.getString(0);
                String descriptionText =cursor.getString(1);
                int photoId=cursor.getInt(2);
                boolean isFavorite=(cursor.getInt(3)==1);

                TextView name =findViewById(R.id.name);
                name.setText(nameText);

                TextView description=findViewById(R.id.description);
                description.setText(descriptionText);

                ImageView photo=findViewById(R.id.photo);
                photo.setImageResource(photoId);
                photo.setContentDescription(nameText);

                CheckBox favarite=findViewById(R.id.favorite);
                favarite.setChecked(isFavorite);
            }
        }catch (SQLiteException e){
            Log.e("sqlite",e.getMessage());
            Toast toast=Toast.makeText(this,"Database unavailable",Toast.LENGTH_SHORT);
            toast.show();
        }
    }

    public void onFavoriteClicked(View view) {
        CheckBox favarite=(CheckBox)view;
        ContentValues drinkValues=new ContentValues();
        drinkValues.put("FAVORITE",favarite.isChecked());

        int drinkId=getIntent().getExtras().getInt(EXTRA_DRINKID);

        SQLiteOpenHelper MyHelper=new StarbuzzDatabaseHelper(this);
        try{
            SQLiteDatabase db=MyHelper.getWritableDatabase();
            int row=db.update("DRINK",drinkValues,
                    "_id=?",new String[]{Integer.toString(drinkId)});
            Log.d("sqlite","update row"+row);
        }catch (SQLException e){
          Log.e("sqlite",e.getMessage());
          Toast.makeText(this,"database unavailable",Toast.LENGTH_SHORT).show();
        }
    }
}

显示错误:
E/SQLiteLog: (1) no such column: FAVORITE
E/sqlite: no such column: FAVORITE (code 1): , while compiling: SELECT NAME, DESCRIPTION, IMAGE_RESOURCE_ID, FAVORITE FROM DRINK WHERE _id=?

检查表的定义,没有 FAVORITE 这个字段(列)

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7651081
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:SQLite数据库----适配器的使用及异常处理
  • 除此之外, 这篇博客: SQLite命令基础详解中的 结语: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在sqlite中,增(insert)删(delete)改(update)查(select)与标准sql语法是相同的。值得一提的是,每个sqlite中都有一个隐藏的表sqlite_master,记载了当前数据库中所有表的建表语句
    在中,增(插入)删(删除)改(更新)查(选择)与标准SQL语法是相同的。值得一提的是,每个SQLITE中都有一个隐藏的表SQLITE_MASTER,记载了当前数据库中所有表的建表语句
    在这里插入图片描述

  • 您还可以看一下 赵庆明老师的SQLite数据库逆向分析课程中的 课前热身:截获函数中的数据小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^