猿问

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

我是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);


            }

        });

编辑:这是 StackTrace


E/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)


我希望我的代码做的是让应用程序更新数据库中我在代码中选择的特定列的值。任何帮助将非常受欢迎。谢谢


BIG阳
浏览 109回答 1
1回答

九州编程

您收到错误是因为您正在使用以下重载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 注入。
随时随地看视频慕课网APP

相关分类

Java
我要回答