为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Android 增加 sqlite 数据库中列的值

使用 Android 增加 sqlite 数据库中列的值

BIG阳 2023-07-19 16:31:04
我是android新手,我正在边学习边学习。我正在尝试开发一个应用程序,当按下按钮时,它会将列的值增加 1。这是我用来执行更新查询的代码:    public void updateItems(String date, String meal){        SQLiteDatabase database = getWritableDatabase();        database.execSQL("Update meal_table SET On_Menu = On_Menu + 1 where date =  '"+date+"' and  Meal =  '"+meal+"'", null);    }2)我尝试了这个,它没有给出任何错误,但它也没有更新数据库:    public Cursor updateItems(String sql){        SQLiteDatabase database = getWritableDatabase();        return database.rawQuery(sql, null);    }这是图像按钮的代码。对于第二个 DatabaseHelper.java 片段,查询位于我的 MainActivity.java 文件中的 imageButton 方法中:            imageButton1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View arg0) {                Toast.makeText(MenuCheck.this,                        "Wonderful!", Toast.LENGTH_SHORT).show();                String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());                sqLiteDatabase.updateItems(date,meal);            }        });编辑:这是 StackTraceE/AndroidRuntime: FATAL EXCEPTION: main    Process: com.wiseowl.mealrater, PID: 12063    java.lang.IllegalArgumentException: Empty bindArgs        at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1730)        at com.wiseowl.mealrater.DatabaseHelper.updateItems(DatabaseHelper.java:61)        at com.wiseowl.mealrater.MenuCheck$1.onClick(MenuCheck.java:61)        at android.view.View.performClick(View.java:6294)        at android.view.View$PerformClick.run(View.java:24770)        at android.os.Handler.handleCallback(Handler.java:790)我希望我的代码做的是让应用程序更新数据库中我在代码中选择的特定列的值。任何帮助将非常受欢迎。谢谢
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

您收到错误是因为您正在使用以下重载execSQL():


public void execSQL (String sql, Object[] bindArgs) 

你null作为第二个参数传递。

如果你使用这个:


public void execSQL (String sql)

只需传递 sql 字符串,代码就可以工作:


database.execSQL(

    "Update meal_table SET On_Menu = On_Menu + 1 where date =  '"+date+"' and  Meal =  '"+meal+"'"

);

但这是执行 sql 语句的错误方法,因为通过连接参数,您很容易受到sql 注入的影响。

您可以做的是使用查询来获取列的当前值On_Menu,然后ContentValues使用该update()方法。

现在还有另一种方法,即直接使用rawQuery(),尽管没有记录:


String sql = "Update meal_table SET On_Menu = On_Menu + 1 where date =  ? and Meal = ?";

Cursor cursor = database.rawQuery(sql, new String[] {date, Meal});

cursor.moveToFirst();

cursor.close();

database.close();

该代码可以正常工作,并且可以正确传递参数,因此可以避免 sql 注入。


查看完整回答
反对 回复 2023-07-19
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信