亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 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 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號